使用 bash 删除旧文件的最有效方法

Most efficient way to delete old files using bash

我目前通过 bash 脚本(在 Centos 6 上)每 30 分钟执行一次此命令以删除大约 1 小时的文件 old.The 问题是 find 命令总共使用了我 cpu 的 45% times.Is 有一种方法可以优化 it.There 在任何时间点缓存中大约有 20 万个项目

find /dev/shm/cache -type f -mmin +59 -exec rm -f {} \;

您可以尝试 运行 使用 nice 将进程设置为较低优先级:

nice -n 19 find ...

另一件事,它可能不会对性能产生影响, 但要删除 find 匹配的文件, 更简单的方法是 -delete 而不是 -exec:

find /dev/shm/cache -type f -mmin +59 -delete

...也就是说,如果您的 find 版本支持它(感谢 @chepner 指出)(现代版本支持...)

您的命令正在为找到的每个文件启动新的 rm 调用,这可能非常昂贵。您可以使用另一种语法将多个参数发送到 rm,在 OS 允许的范围内批量发送。这是通过以 + 而不是 ;

结束命令来完成的
find /dev/shm/cache -type f -mmin +59 -exec rm -f {} +

您也可以使用 -delete 选项,如 janos 的回答;它应该更有效率,因为它根本不需要 运行 外部进程。我显示这个答案是因为它也适用于其他命令,这些命令可能没有等效选项,例如

-exec grep foo {} +