递归删除除某些特定类型之外的所有文件

时间:2013-12-30 19:28:48

标签: bash

我想以递归方式删除某些文件夹中的所有文件,但扩展名为.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

2 个答案:

答案 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命令之前检查以执行实际删除。