Bash
為什麼使用 find -exec 刪除目錄會生成錯誤消息?
為什麼會這樣:
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 ... {} +
,因為這會收集路徑名,直到達到參數的最大大小。