Find

查找同時滿足這兩個要求的文件

  • July 13, 2021

我以前從未需要使用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因為運算符優先於預設-print操作;沒有括號它看起來像

find . \( -type f -a -name "*foo*" \) -o \( -name "*bar*" -a -print \)

(只會列印匹配的條目-name "*bar*",並且不管它們的類型如何) - 在這種-a情況下,所有測試都以相同的優先級綁定,並且不需要括號。參見例如查找命令中的運算符優先級?

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