此命令不符合 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
退出。因此,如果有很多内容需要删除,但没有修剪太多搜索空间,那么这可能不是一个胜利。