Bash

使用 find 循環遍歷目錄。-深度 1 -類型 d

  • September 26, 2022

我得到了一個要執行的腳本,但是在呼叫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 ...),因為如果任何文件名包含空格,您將面臨問題。

看:

(* 就像文字暗示的那樣,-depth對於預購/預購切換的名稱是不准確的。)

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