Bash
查找標誌:-exec rm -rf vs -delete
我認為我在問題中提到的標誌是相同的,但我收到前者的以下消息,但後者沒有:
$ 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 when
find’ 嘗試遞歸到現在已被刪除的目錄。使用 `-depth’ 選項通常可以解決這個問題。其他問題:
- 命令的簡單性取決於您的情況,在列出的情況下是:
rm -rf practice*
.- IIRC,文件的處理順序取決於文件系統。
Thor已經解釋了您收到此錯誤的原因以及如何在使用
find
.除非您有無法在 shell 腳本中表達的其他條件,否則呼叫
find
with是沒有意義的。-mindepth 1
你想做的可以寫成rm -rf */
只要目前目錄不包含任何名稱以開頭的目錄
.
(不會被 匹配*
)或目錄的符號連結(您的find
命令排除但上面的 shell 片段包含)。