findを使用して「or」検索を実行するには? [コピー]

findを使用して「or」検索を実行するには? [コピー]

基本的に、1つのコマンドで2つ(またはそれ以上)のfindコマンド(「AND」ではなく「OR」検索)を実行する方法を知りたいです。

find . -name "*.pem"
find . -name "*.crt"

ベストアンサー1

find「または」演算子は次のとおりです-o

find . -name "*.pem" -o -name "*.crt"

段落ですね。つまり2番目の部分は、最初の部分がfalseの場合にのみ評価されます。一致するファイルは*.pemテストされません*.crt

-o明示的に(-a)または暗黙的に "and"より優先順位が低いです。演算子を結合する場合は、「or」部分を括弧で囲む必要があります。

find . \( -name "*.pem" -o -name "*.crt" \) -print

私のテストでは、予想どおり正規表現を使用するよりもはるかに高速でした(正規表現はglobよりテストコストが高く、ファイル名だけで-regexなくフルパスもテストします-name)。

おすすめ記事