Find

優化一個shell腳本/命令來刪除文件

  • February 8, 2015

我正在執行 Magento,它不會清理舊的會話數據,所以我需要使用 shell 腳本/cronjob 來清理它:

0,30 * * * * /usr/bin/find /var/www/magento/var/session -name 'sess_*' -type f -mtime +1 -exec rm {} \;

但是該腳本通常需要幾分鐘才能刪除舊文件。我想知道是否需要搜尋文件,因為在這個目錄中只有以“sess_”開頭的文件 - 但我仍然需要以某種方式遍歷這些文件,對吧?

(每天在此目錄中創建大約 50.000 個文件)

根本不用擔心執行rm,find 可以處理它:

0,30 * * * * /usr/bin/find /var/www/magento/var/session -name 'sess_*' -type f -mtime +1 -delete

如果該目錄中唯一的東西是sess_*文件,您可以省略-name 'sess_*', 並且find無論如何都會遍歷。通過移除-exec零件來測試它會匹配什麼。

$ /usr/bin/find /var/www/magento/var/session -type f -mtime +1

然後對於 cron 作業,

0,30 * * * * /usr/bin/find /var/www/magento/var/session -type f -mtime +1 -exec rm {} \;

話雖如此,我不確定這是否是瓶頸所在,所以也許 mikeserv 的評論會更有幫助。

此外,出於安全原因,您可能應該使用-execdir而不是;-execman find

引用自:https://unix.stackexchange.com/questions/183568