Linux

find 和 rm 命令刪除了目錄內的文件和目錄本身

  • May 20, 2018

你能檢查一下這個命令嗎?它正在刪除文件和目前目錄本身。腳本通過 cron 執行。

目錄:

/log/dir/
/log/dir/tmp/

腳本中的命令:

find /log/dir/ -mtime +7 -name "*" -exec rm -rf {} \;
find /log/dir/tmp -mtime +7 -name "*" -exec rm -rf {} \;

測試:執行find /log/dir/ -mtime +7 -name "*"檢查文件,我得到了結果。執行腳本後,文件被刪除。幾天后,文件夾也被刪除(目錄 in/log/dir/和 tmp in /log/dir/tmp)。

預期應該只刪除超過 7 天提供的路徑內的文件/目錄。

Linux redhat6.5

如果您只想find刪除正常文件而不刪除目錄,請務必確保使用-type f. 這將防止處理引用目錄(或任何非正常文件)的路徑名。自上次修改的時間戳滿足刪除條件後,目錄已被刪除。

此外,如果您要刪除文件,請不要使用,rm -r因為遞歸到正常文件沒有意義。對於大多數find實現,您還可以選擇使用-delete而不是-exec rm.

-name "*"是一個無操作並且可以被刪除,因為每個名稱都匹配*

如果您執行 find over /log/dir,那麼您不需要執行它,/log/dir/tmp因為後者將作為前者的一部分進行處理。如果您打算只查看這兩個目錄,而不是子目錄,請添加-maxdepth 1find(如果它支持),在這種情況下,您確實需要單獨處理它們(但這可以在一次find呼叫中完成,因為實用程序需要任意數量的頂級目錄)。

建議,取決於您想要實現的目標:

find /log/dir /log/dir/tmp -maxdepth 1 -type f -mtime +7 -delete

mtime從目錄中添加或刪除文件時,會更新目錄的 。因此,不清楚您嘗試根據上次修改的時間戳刪除目錄是否是一個好主意。


對於日誌文件的輪換,您還可以logrotate從 cron 作業中查看使用或一些類似的實用程序。

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