Bash

查找標誌:-exec rm -rf vs -delete

  • February 21, 2013

我認為我在問題中提到的標誌是相同的,但我收到前者的以下消息,但後者沒有:

$ find . -mindepth 1 -type d -exec rm -rf {} \;
find: `./practice4': No such file or directory
find: `./practice10': No such file or directory
find: `./practice7': No such file or directory
find: `./practice9': No such file or directory
find: `./practice1': No such file or directory
find: `./practice5': No such file or directory
find: `./practice3': No such file or directory
find: `./practice6': No such file or directory
find: `./practice2': No such file or directory
find: `./practice8': No such file or directory

我的額外問題是:是否有更簡單的程式碼來刪除所有子目錄?刪除順序是隨機的嗎?我使用創建了目錄

$ mkdir practice{1..10}

從 GNU 查找手冊:

如果您的find' command removes directories, you may find that you get a spurious error message whenfind’ 嘗試遞歸到現在已被刪除的目錄。使用 `-depth’ 選項通常可以解決這個問題。

其他問題:

  • 命令的簡單性取決於您的情況,在列出的情況下是:rm -rf practice*.
  • IIRC,文件的處理順序取決於文件​​系統。

Thor已經解釋了您收到此錯誤的原因以及如何在使用find.

除非您有無法在 shell 腳本中表達的其他條件,否則呼叫findwith是沒有意義的。-mindepth 1你想做的可以寫成

rm -rf */

只要目前目錄不包含任何名稱以開頭的目錄.(不會被 匹配*)或目錄的符號連結(您的find命令排除但上面的 shell 片段包含)。

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