使用shell脚本,我想从以下目录结构中删除文本文件,日志文件和CSV文件,同时保持目录结构不变:
|
|------bar/
|
|---file1.txt
|---file2.txt
|
|---subdir1/
| |---file1.log
| |---file2.log
|
|---subdir2/
|---image1.log
|---image2.log
我正在使用rm -rf /bar/*
,因此我得到以下结果:
|------bar/
但是,我想要以下结果:
|
|------bar/
|
|
|
|
|---subdir1/
|
|
|
|---subdir2/
答案 0 :(得分:5)
在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
答案 1 :(得分:0)
此命令将查找并删除条目目录中的所有.log,.txt和.csv文件:
find ./bar/ -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" | xargs rm
如果您的文件包含空格,则需要在Employed Russian的解决方案上使用稍有不同:
find ./bar/ -type f -name "*.txt" -o -name "*.log" -o -name "*.csv" -print0| xargs -0 rm
答案 2 :(得分:0)
如果您正在运行bash 4+
:
(shopt -s globstar nullglob; cd bar && rm **/*.txt **/*.log **/*.csv)
globstar
启用了对目录层次级别与**
匹配文件的支持。nullglob
使得与NO文件匹配的globs返回空字符串,而不是通过未修改的通过globs,这通常会导致错误。)(...)
中的封闭,以便本地化更改shell选项的效果。