Bash使用
使用 find 循環遍歷目錄。-深度 1 -類型 d
我得到了一個要執行的腳本,但是在呼叫
find . -depth 1 -type d
. 它產生以下錯誤,find: paths must precede expression: `1'
這是它失敗的那一行,
for dir in `find . -depth 1 -type d` do ....
我已經嘗試了很多事情但沒有成功。而且我真的不明白為什麼它會給出錯誤,因為至少在我看來,路徑確實在“1”之前。
-depth
開關不帶參數,但是,-maxdepth does
所以:for dir in `find . -depth -maxdepth 1 -type d` do ....
應該管用。
根據手冊頁的
-depth
參數意味著首先處理目錄內容。
該命令是為 FreeBSD 版本
find
(或類似版本)編寫的,並且您正在使用另一個不支持. 根據錯誤消息,可能是 GNU 版本。FreeBSD 版本有兩個選項(手冊頁):-depth *n*``-depth
-depth
始終正確;與不可移植的 -d 選項相同。導致 find 執行深度優先遍歷,即以後序訪問目錄,並且目錄中的所有條目將在目錄本身之前執行。預設情況下,按預定順序查找訪問目錄,即在其內容之前。注意,預設不是廣度優先遍歷。
-depth n
如果文件相對於遍歷起點的深度為 n,則為真。
第一個是標準的(*),第二個不是。由於標準版本不帶參數,並且單獨的參數(路徑)不能在 find 表達式之內或之後給出(如您所見),FreeBSD 版本可以在某種程度上擺脫覆蓋名稱。(它可能仍然容易出錯,因為忘記參數 to
-depth
會改變含義。)GNU 和 Busybox 具有同樣的非標準,它們一起使用時可用於要求特定的深度:
-mindepth *n*``-maxdepth *n*
find . -mindepth 1 -maxdepth 1 -type d
請注意,您可能不應該使用
for f in $(find ...)
,因為如果任何文件名包含空格,您將面臨問題。看:
- mywiki.wooledge.org中的 BashPitfalls
- 為什麼我的 shell 腳本會因空格或其他特殊字元而窒息?
(* 就像文字暗示的那樣,
-depth
對於預購/預購切換的名稱是不准確的。)