我們有一個簡單的腳本來刪除舊資料夾。問題是它不會遞歸地刪除它們。
這是命令:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
它刪除檔案和資料夾,但突然嘗試從已刪除的目錄中刪除檔案。
伺服器正在運行中央作業系統,並且資料夾是使用安裝的網路檔案系統從存儲中。
我們可以做什麼?
答案1
發生這種情況是因為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 正如建議的@迪米塔爾您可以新增-type d
然後尋找將僅對目錄進行操作。它可能會更快,但在這種情況下,您不會清理$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 {} \;
我認為這確實是最好的方法。