Find
為什麼 POSIX 查找參數與其他程序樣式不同?
為什麼 POSIX
find
命令中的參數為多字元參數名稱添加單個連字元,而大多數其他程序使用單個連字元表示多個單字元標誌,並使用雙連字元表示具有多個字元的單個參數名稱?這似乎不一致,我很好奇
A. 為什麼它真的沒有矛盾,或
B. 該決定的歷史。
請注意,POSIX find 確實支持像其他命令一樣的選項,並且像其他命令一樣
--
標記它們的結尾。那些是-H
和-L
。,
-type
不是選項,它們有時被稱為謂詞。它們是參數,其順序很重要,出現在文件路徑之後,而文件路徑本身出現在選項之後。你也有(
和!
。他們一起建構了一個表達式,用於確定要查找的文件。
find
不是唯一的。[
(akatest
) 並且expr
是其他命令,其參數用於建構表達式。像
find
, 具有以多個字母 ( , …)開頭且不止一個字母的[
運算符。-``-gt``-eq
像
find
,test
有這些運算符可能與操作數混淆的問題。find -- "$file1" "$file2" -type f [ -f "$file1" -a -f "$file2" ]
如果
$file2
是!
,那是 的問題find
。如果是=
,則 (some) 有問題[
。對於所有
find
,test
和expr
, 使用選項來建構表達式並不會真正起作用。另一種選擇可能是將一個字元串評估為類似awk
or的表達式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 使用了。