使用 find 删除文件同时排除文件

使用 find 删除文件同时排除文件

此命令不符合 DWIM 标准:

find . \( -name .svn -prune -false \) -o \( -empty -delete \)
find: The -delete action atomatically turns on -depth, but -prune 
      does nothing when -depth is in effect.  If you want to 
      carry on anyway, just explicitly use the -depth option.

添加-depth会禁用 的效果-prune,这意味着.svn目录也会被删除。那么:哪种find语法(如果有)可用于修剪然后删除一些未修剪的路径,而不使用其他工具,例如rm

答案1

您可以使用-path,它不是 POSIX,但许多实现都支持:

find . \! -path "*/.svn/*" -empty -delete

-regex也是一个选择。

答案2

如果空格不是问题,类似这样的事情就可以了

find . \( -name .svn -prune -false \) -o -print | tac | xargs -L rm -f

这种方法的优点是,当我们要避免的树部分-prune很大时,它会带来巨大的性能提升。缺点是 -delete 一旦看到叶子就会删除东西,但这个命令必须等到find退出。因此,如果有很多内容需要删除,但没有修剪太多搜索空间,那么这可能不是一个胜利。

相关内容