Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash删除旧文件的最有效方法_Bash_Unix_Find - Fatal编程技术网

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

使用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 ... 另一件事,它可能不会对性能产生影响, 但要使用查找删除匹配的文件, 更简单的方法是-

我目前正在通过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 ...
另一件事,它可能不会对性能产生影响, 但要使用
查找
删除匹配的文件,
更简单的方法是
-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
,但如果可用的话,使用起来非常好。