Linux

GNU 使用 -print 查找邏輯運算符

  • January 29, 2021

考慮以下文件佈局:

.
├── 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 不會到達-printfor dir_a

  • file_1

Find 不考慮,因為dir_a被修剪,所以不列印。

  • file_2

-name測試不匹配,因此是錯誤的\( -name dir_a -prune \),並且 Find 到達-print主要。

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