Bash
查找和 rm 命令不遞歸刪除
我們有一個假設刪除舊文件夾的簡單腳本。問題是它不會遞歸地刪除它們。
這是命令:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
它會刪除文件和文件夾,但突然嘗試從已刪除的目錄中刪除文件。
伺服器正在執行CentOS,並且使用NFS從儲存中掛載文件夾。
我們能做些什麼?
發生這種情況是因為
rm
從命令接收到所有找到的文件和目錄的列表find
。列表中的目錄位於它們前面並遞歸刪除文件。我可以提供兩種解決方案:
- 對遞歸
find
結果進行排序:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- 使用
-delete
選項而不是外部rm
工具。find $PWD -maxdepth 5 -mtime +80 -delete
UPD.1 sugests @Dimitar您可以添加
-type d
然後 find 將僅對目錄進行操作。它可能更快,但在這種情況下,您不會清理$PWD
目錄中的舊文件。find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}
UPD.2正如@ezra-s所建議的那樣,您可以在沒有以下情況下做到這一點
xargs
:find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;
我認為這確實是最好的方法。