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

时间:2015-10-28 20:21:17

标签: bash unix find

我目前正在每30分钟通过一个bash脚本(在Centos 6上)执行此命令,以删除大约1小时左右的文件。问题是find命令正在使用我的cpu的45%所有的时间。有没有办法优化它。在任何时间点缓存大约有200万个项目

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

2 个答案:

答案 0 :(得分:5)

您可以尝试使用nice

以较低优先级运行该流程
nice -n 19 find ...

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

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

...即如果您的find版本支持它(感谢@chepner指出)(现代版本会...)

答案 1 :(得分:2)

您的命令正在为找到的每个文件启动rm的新调用,这可能非常昂贵。您可以使用一种替代语法,将多个参数发送到rm,批量与操作系统允许的一样大。这是通过使用+而不是;

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

你也可以使用-delete选项,就像janos的回答一样;它应该更高效,因为它根本不需要运行外部进程。我正在展示这个答案,因为它也推广到其他命令,可能没有相同的选项,例如

-exec grep foo {} +