删除大量文件的更快方法

pra*_*tri 13 linux find rm

我有一个目录,其中非常快速地生成了许多缓存文件。由于这些文件非常小,因此它会很快消耗我的所有 inode。

目前我正在运行以下命令来查找所有早于 12 小时的文件并删除它们。

$ find ./cache -mtime +0.5 -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

但是此命令删除的速度比生成文件的速度慢。有人可以告诉我一些快速删除大量文件的替代方法。

Gil*_*il' 24

find … -exec rm {} \;rm为每个文件执行命令。尽管启动一个新进程非常快,但它仍然比仅仅删除文件的行为慢得多。

find … -exec rm {} +rm分批调用,这样会快很多:你支付rm每批运行一次的成本,每批执行多次删除。

甚至更快的是根本不调用rm。在find对Linux命令有一个动作-delete来删除一个匹配的文件。

find ./cache -type f -mtime +0.5 -delete
Run Code Online (Sandbox Code Playgroud)

但是,如果您以find … -exec rm {} \;跟不上的速度生成文件,则您的设置可能有问题。如果cache包含数百万个文件,您应该将其拆分为子目录以加快访问速度。


cuo*_*glm 19

尝试使用xargs

find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Run Code Online (Sandbox Code Playgroud)

@pradeepchhetri 的更新说明

如果使用findwith -execfind找到的每个文件都会调用rm一次。因此,如果您发现大量文件,即 10000 个文件,则调用rm10000 次。

xargs将把输出find作为命令参数rm,因此,xargs 将提供尽可能多的参数rm,即一次可以处理,即rm -f file1 file2 ...因此它减少了 fork 调用,使程序运行得更快。