如何使用rm命令删除linux中的所有空文件,而不管其目录如何

时间:2017-07-24 08:25:49

标签: linux rm

我的Linux文件系统的各个子目录中有很多空文件。如何使用rm命令仅删除空文件?

我已经厌倦了通过转到所有目录并找到要手动删除的空文件来删除,因此我找到了find -size 0 -type f | rm -f等命令的组合。但是我需要删除所有目录中的所有空文件,只能使用一个rm命令吗?

2 个答案:

答案 0 :(得分:1)

我认为rm不允许根据文件大小选择文件。但是,如果您只想使用一个命令,则可以使用find

find /path/to/dir -type f -empty -delete

-type f是必要的,因为目录也被标记为大小为零。 -delete应该最后发布。

但是,您可能希望删除所有文件而不管其目录是什么,因此不建议这样做,因为有许多系统文件和一些符号链接也可能在此过程中被删除。

答案 1 :(得分:0)

好吧,rm(1)命令只删除在命令行上传递给它的名字的文件rm(1)中没有代码允许您根据某些条件或条件过滤这些文件。旧的UNIX filosophy在这里要求,编写简单的工具并将它们连接到管道上,以构建复杂的命令。在这种情况下,find(1)就是答案......这是一个基于非常随意的标准(如你要求的)选择文件的工具,并生成实际的文件名或简单地根据它调用命令。在这方面

find dir1 dir2 ... -type f -size 0 -print | xargs rm

将是解决方案(使用xargs(1)命令对文件名进行批处理以减少对问题执行的fork(2)exec(2)次调用,并允许指定多个目录,选择仅限大小为0的文件并将其传递给批处理命令xargs(1)以将其擦除为组。您甚至可以使用

基于某些正则表达式过滤文件名
find dir1 dir2 ... -type f -size 0 -print | grep 'someRegularExpression' | xargs rm

并且您将仅删除与正则表达式匹配的文件(以及您在find(1)中表达的其他两个谓词)您甚至可以使用

获取已删除文件的列表
find dir1 dir2 ... -type f -size 0 -print | grep 'someRegularExpression' | tee erased.txt | xargs rm

请参阅find(1)grep(1)tee(1)xargs(1)rm(1)以供参考。