通过文件名删除所有文件(Linux单行)

CakePHP有一个将空文件名为“空”的文件放在空目录中。 我相信他们有一个理由,但它真的让我感到困扰。 (是的,强迫症,我知道…)

我想要一个单行的linux shell命令,它将删除每个后代目录中名称为“empty”的每个文件。 (我认为能够指定更通用的通配符也是有用的。)

有任何想法吗?

最简单的是:

找 。 -name空-type f -exec rm -f {} \;

“” 从当前目录开始,如果要在其他位置执行,则replace为目录path。

“-type f”只是确保它是一个文件。

简短的摘要:

有多种select:

find . -name empty -type f -exec rm -f {} \; 

将每个文件一次调用rm

 find . -name empty -type f -exec rm -f {} + 

只会通过构build一个尽可能长的命令行来尽可能多地调用rm

 find . -name empty -type f | xargs rm -f 

和上面一样,你可能会(或者更确切地说,就像上面那样 – 这是我的方法)遇到包含需要引用字符的文件名的问题

 find -name empty -type f -print0 | xargs -0 rm -f 

可能是最好的解决scheme请Upvote丹C的评论这是他的解决scheme 。 正如前面的代码段所述,通过构build一个使用最大长度的命令行,只需要经常调用rm-0开关意味着rm命令的参数将被分隔为\0以便转义在贝壳。

在关于使用-type f进行限制的注释方面,您还可以使用-size 0 (完全是0字节)进行限制我无法validationCakePHP是否真的遵守该约定,但几乎所有我知道使用占位符文件的项目检查到源存储库的空目录是否做到这一点。

同样,马特·西蒙斯(Matt Simons)指出,添加一个-v标志可能是一个很好的select,可以看到一些进展,但是请注意,这肯定会减慢整个过程。 一个更好的方法可能是通过使用strace -p $pid_of_xargs (如果你想关注subprocess,添加strace -p $pid_of_xargs选项,afaik是可能的)

我刚刚在手册中发现的另一个说明:

 find -name empty -type f -delete 

毕竟发现所有的内置:)

CakePHP可能会这样做的一个可能的原因是因为一些版本控制系统(例如Mercurial和Git)不能跟踪一个空目录。

这可能会:

 rm -f $(find /var/www -name empty -print) 

查找默认情况下recursion。