Bash

為什麼使用 find -exec 刪除目錄會生成錯誤消息?

  • October 1, 2015

為什麼會這樣:

find . -type d -name test -exec rm -r {} \;

生成錯誤消息:

find: ./foo/test: No such file or directory
find: ./bar/test: No such file or directory
find: ./blech/test: No such file or directory

即使它實際上刪除了相關目錄?

這適用於 OS X (10.10)。

查找用於readdir()從目錄中獲取內容的用途。

由於 readdir() 是一個實現記憶體的庫函式,並且find即使沒有記憶體也無法知道被呼叫程序刪除了剛剛發現的目錄,因此標準的 find 呼叫總是會導致此類錯誤。

您的問題有一個乾淨的解決方案:

find . -depth ...

(將 … 替換為 find 命令行的其餘部分)

將告訴find在目錄本身之前處理所有目錄內容。

順便說一句:我建議您閱讀find手冊頁。自 26 年以來,有一個比-exec ... {} \;這更慢的解決方案,並且為每次點擊創建一個子流程。尋找-exec ... {} +,因為這會收集路徑名,直到達到參數的最大大小。

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