【问题标题】:Most efficient way to delete old files using bash使用 bash 删除旧文件的最有效方法
【发布时间】:2015-10-28 20:21:17
【问题描述】:

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

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

【问题讨论】:

    标签: bash unix find


    【解决方案1】:

    您可以尝试使用nice 以较低的优先级运行该进程:

    nice -n 19 find ...
    

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

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

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

    【讨论】:

    • 并非所有find 的实现都支持-delete,但如果可用,它非常好用。
    【解决方案2】:

    您的命令正在为找到的每个文件开始新的rm 调用,这可能非常昂贵。您可以使用另一种语法,将多个参数发送到rm,在操作系统允许的范围内批量发送。这是通过以+ 而不是; 结束命令来完成的

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

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

    -exec grep foo {} +
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2012-10-07
      相关资源
      最近更新 更多