我的Linux文件系统的各个子目录中有很多空文件。如何使用rm
命令仅删除空文件?
我已经厌倦了通过转到所有目录并找到要手动删除的空文件来删除,因此我找到了find -size 0 -type f | rm -f
等命令的组合。但是我需要删除所有目录中的所有空文件,只能使用一个rm
命令吗?
答案 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)
以供参考。