Find
查找同時滿足這兩個要求的文件
我以前從未需要使用
find
多個搜尋詞。我找到了這個:find . -type f \( -name "*foo*" -o -name "*bar*" \)
..但它會找到滿足其中任何一個的文件,而不是同時滿足兩者。
有誰知道如何調整它以找到同時滿足這兩個要求的文件?
我盡量避免使用正則表達式,所以如果可以不用它會更好,但如果不能,只要它有效。
邏輯與的等價物是
-a
。但是,無論如何,邏輯 AND 是預設值,如手冊所述:Operators Operators join together the other items within the expression. They include for example -o (meaning logical OR) and -a (meaning logical AND). Where an operator is missing, -a is assumed.
所以你可以簡單地將條件連結起來
find [paths] condition1 condition2 ...
前任。
find . -type f -name "*foo*" -name "*bar*"
事實上,這就是你隱含的做法
find . -type f \( -name "*foo*" -o -name "*bar*" \)
可以寫成
find . -type f -a \( -name "*foo*" -o -name "*bar*" \)
請注意,括號是必需的,
-o
因為運算符優先於預設find . \( -type f -a -name "*foo*" \) -o \( -name "*bar*" -a -print \)
(只會列印匹配的條目
-name "*bar*"
,並且不管它們的類型如何) - 在這種-a
情況下,所有測試都以相同的優先級綁定,並且不需要括號。參見例如查找命令中的運算符優先級?