使用bash删除旧文件的最有效方法
我目前正在通过bash脚本(在Centos 6上)每30分钟执行一次此命令,以删除大约1小时前的文件。问题是使用bash删除旧文件的最有效方法,bash,unix,find,Bash,Unix,Find,我目前正在通过bash脚本(在Centos 6上)每30分钟执行一次此命令,以删除大约1小时前的文件。问题是find命令始终占用我45%的cpu。是否有办法对其进行优化。在任何时间点,缓存中都有大约200k个项目 find /dev/shm/cache -type f -mmin +59 -exec rm -f {} \; 您可以尝试使用nice以较低优先级运行进程: nice -n 19 find ... 另一件事,它可能不会对性能产生影响, 但要使用查找删除匹配的文件, 更简单的方法是-
find
命令始终占用我45%的cpu。是否有办法对其进行优化。在任何时间点,缓存中都有大约200k个项目
find /dev/shm/cache -type f -mmin +59 -exec rm -f {} \;
您可以尝试使用
nice
以较低优先级运行进程:
nice -n 19 find ...
另一件事,它可能不会对性能产生影响,
但要使用查找删除匹配的文件,
更简单的方法是-delete
而不是-exec
:
find /dev/shm/cache -type f -mmin +59 -delete
。。。也就是说,如果您的find
版本支持它(感谢您指出)(而现代版本支持…)您的命令正在为找到的每个文件启动新的rm
调用,这可能非常昂贵。您可以使用另一种语法,将多个参数发送到rm
,批量越大越好。这是通过使用+
而不是结束命令来完成的代码>
find /dev/shm/cache -type f -mmin +59 -exec rm -f {} +
您还可以使用-delete
选项,如janos的回答;它应该更高效,因为它根本不需要运行外部进程。我给出这个答案是因为它也推广到其他命令,这些命令可能没有等效的选项,例如
-exec grep foo {} +
并非所有的find
实现都支持-delete
,但如果可用的话,使用起来非常好。