使用shell脚本,我只想从以下目录结构中删除文本文件,日志文件和CSV文件,同时保持目录结构不变:
| |------bar/ | |---file1.txt |---file2.txt | |---subdir1/ | |---file1.log | |---file2.log | |---subdir2/ |---image1.log |---image2.log
我正在使用rm -rf /bar/*
,所以我得到以下结果:
|------bar/
不过,我想要以下结果:
| |------bar/ | | | | |---subdir1/ | | | |---subdir2/
在UNIX上(或使用cygwin的Windows上):
老套:
find bar -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -print0 | xargs -0 rm -f
使用GNU find(由mklement0建议):
find bar -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -delete
该命令将查找并删除条目录中的所有.log,.txt和.csv文件:
find ./bar/ -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" | xargs rm
如果您的文件包含空格,您将需要使用俄罗斯就业解决方案略有差异:
find ./bar/ -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -print0| xargs -0 rm
如果你正在运行bash 4+
:
(shopt -s globstar nullglob; cd bar && rm **/*.txt **/*.log **/*.csv)
globstar
启用对使用**
跨目录层次级别匹配文件的支持。 nullglob
使与NO文件匹配的globs返回一个空字符串,而不是通过未修改的传递globs,这通常会导致错误)。 (...)
,以便本地化更改shell选项的效果。