使用 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 {} +
我目前通过 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 {} +