Find 和 rm 指令不遞歸刪除

Find 和 rm 指令不遞歸刪除

我們有一個簡單的腳本來刪除舊資料夾。問題是它不會遞歸地刪除它們。

這是命令:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

它刪除檔案和資料夾,但突然嘗試從已刪除的目錄中刪除檔案。

伺服器正在運行中央作業系統,並且資料夾是使用安裝的網路檔案系統從存儲中。

我們可以做什麼?

答案1

發生這種情況是因為rm從命令接收所有找到的檔案和目錄的清單find。目錄清單中的目錄位於它們前面並遞歸刪除檔案。

我可以提供兩種解決方案:

  1. 種類遞迴的 find結果:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. 使用-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 {} \;

我認為這確實是最好的方法。

相關內容