如何使用 rm 命令删除 linux 中的所有空文件,而不考虑它们的目录

How delete all the empty files in linux irrespective of their directory using rm command

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

我厌倦了通过转到所有目录并找到要手动删除的空文件来删除,所以我找到了像 find -size 0 -type f | rm -f 这样的命令组合。但是我需要删除所有目录中的所有空文件,是否可以仅使用一个 rm 命令?

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

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

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

但是您可能想要删除所有文件而不考虑它们的目录,不建议这样做,因为有许多系统文件和一些符号链接也可能在此过程中被删除。

好吧,rm(1) 命令 只会删除您在命令行 上传递给它的名称的文件。 rm(1) 中没有代码允许您根据某些条件或条件过滤这些文件。旧的 UNIX 哲学在这里要求,编写简单的工具并将它们耦合到管道上,以构建复杂的命令。在这种情况下,find(1) 就是答案……这是一种工具,可以根据相当任意的标准(比如您要求的标准)生成 select 文件,并生成实际文件名或简单地调用基于命令的命令在那上面。在这方面

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

将是您问题的解决方案(使用 xargs(1) 命令对文件名进行批处理,以减少 fork(2)exec(2) 调用,减少进程分叉开销),允许指定多个目录, select 仅处理大小为 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)