Linux
GNU 使用 -print 查找邏輯運算符
考慮以下文件佈局:
. ├── dir_a │ └── file_1 └── file_2
呼叫
find . \( -name dir_a -prune \) -a -print
給
./dir_a
但呼叫
find . \( -name dir_a -prune \) -o -print
給
./file_2
為什麼邏輯 OR (-o) 不包括邏輯 AND (-a) 的結果?
從Find 的規範(GNU Find 手冊有類似的措辭):
表達式 -o 表達式
初選交替;OR 運算符。 如果第一個表達式為真,則不應計算第二個表達式。
dir_a
由於
-name
匹配且-prune
始終\( -name dir_a -prune \)
為真,因此為真,因此 Find 不會到達dir_a
。
file_1
Find 不考慮,因為
dir_a
被修剪,所以不列印。
file_2
-name
測試不匹配,因此是錯誤的\( -name dir_a -prune \)
,並且 Find 到達