我想以递归方式删除某些文件夹中的所有文件,但扩展名为.gz的文件夹除外。通常我用
find /thepath -name "foo" -print0 | xargs -0 rm -rf
以递归方式删除/ thepath中名为“foo”的所有文件夹。但现在我想添加一个排除选项。怎么可能?
例如,文件夹结构类似于
.hiddenfolder
.hiddenfolder/bin.so
arc.tar.gz
note.txt
sample
所以我想删除所有内容,但保留arc.tar.gz
答案 0 :(得分:7)
查找并删除/ thepath下的所有文件,但名称匹配* .gz:
除外# First check with ls -l
find /thepath -type f ! -name '*.gz' -print0 | xargs -0 ls -l
# Ok: delete
find /thepath -type f ! -name '*.gz' -print0 | xargs -0 rm -vf
哦,并删除所有空的剩余目录:
find /thepath -type d -empty -print0 | xargs -0 rmdir -v
答案 1 :(得分:2)
我认为
find /thepath -name "foo" ! -name "*.gz" -print0
应生成正确的文件名列表,但在将输出汇总到xargs
命令之前检查以执行实际删除。