在不破坏目录结构的情况下,从目录子树的所有级别按扩展名删除文件

use*_*876 2 linux shell glob

使用shell脚本,我想从以下目录结构中删除文本文件,日志文件和CSV文件,同时保持目录结构不变:

|
|------bar/
    |
    |---file1.txt
    |---file2.txt
    |
    |---subdir1/
    |   |---file1.log
    |   |---file2.log
    |
    |---subdir2/
        |---image1.log
        |---image2.log
Run Code Online (Sandbox Code Playgroud)

我正在使用rm -rf /bar/*,所以我得到以下结果:

|------bar/
Run Code Online (Sandbox Code Playgroud)

但是,我想要以下结果:

|
|------bar/
    |
    |
    |
    |
    |---subdir1/
    |   
    |   
    |
    |---subdir2/
Run Code Online (Sandbox Code Playgroud)

Emp*_*ian 5

在UNIX上(或在使用cygwin的Windows上):

老套:

find bar -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -print0 |
xargs -0 rm -f
Run Code Online (Sandbox Code Playgroud)

使用GNU find(由mklement0建议):

find bar -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -delete
Run Code Online (Sandbox Code Playgroud)