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)。

答え2

この質問を入力すると、findは基本的に正規表現の代わりにワイルドカードを使用していると思いました。しかし、正規表現を使ってこれを行う方法があると確信しています!

もちろん、... posix-extendを使用するには正規表現の種類を変更する必要がありましたが、これは私が望む結果をもたらしました。

find . -regextype posix-extended -regex ".*pem|.*crt"

カプラ!

関連情報