Find

為什麼 POSIX 查找參數與其他程序樣式不同?

  • May 23, 2018

為什麼 POSIXfind命令中的參數為多字元參數名稱添加單個連字元,而大多數其他程序使用單個連字元表示多個單字元標誌,並使用雙連字元表示具有多個字元的單個參數名稱?

這似乎不一致,我很好奇

A. 為什麼它真的沒有矛盾,或

B. 該決定的歷史。

請注意,POSIX find 確實支持像其他命令一樣的選項,並且像其他命令一樣--標記它們的結尾。那些是-H-L

, -print-type不是選項,它們有時被稱為謂詞。它們是參數,其順序很重要,出現在文件路徑之後,而文件路徑本身出現在選項之後。你也有(!。他們一起建構了一個表達式,用於確定要查找的文件。

find不是唯一的。[(aka test) 並且expr是其他命令,其參數用於建構表達式

find, 具有以多個字母 ( , …)開頭且不止一個字母的[運算符。-``-gt``-eq

findtest有這些運算符可能與操作數混淆的問題。

find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]

如果$file2!,那是 的問題find。如果是=,則 (some) 有問題[

對於所有find,testexpr, 使用選項來建構表達式並不會真正起作用。另一種選擇可能是將一個字元串評估為類似awkor的表達式sed。像

find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +

做:

find 'found = 0
     if (typeof($f) == "f") {
       if (age($f) > 1) found=1
     } else if (age($f) < age("x")) found = 1
     if ($found) exec_multi("ls -ld {}")' f1 f2

但這意味著在find. 這也意味著上述"x"和命令行的潛在引用噩夢。

實際上,AT&T Research 確實提出了這樣一個命令:tw(tree walker),但即使它現在是開源的,我也不知道它真的被 AT&T 使用了。

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