クエリで論理ORを使用する方法は?

クエリで論理ORを使用する方法は?

論理OR関数はbashシェルでls次のように使用できます(もちろん私はこれを行うことができますが、ls name1 name2実際の例はもっと複雑です)。

ls @(name1|name2)

を使用してこれを行う方法はありますかfind

私の無邪気な実装:

find . -maxdepth 1 -name @("name1"|"name2") 

動作しません(何も出力しません)

答え1

-ofor logicを使用できますOR。ただし、すべての述語に論理値があるため、一般に項目をグループ化するには括弧をfind使用する必要があります。OR括弧もシェルに意味があるため、括弧もエスケープする必要があります。

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print

答え2

あなたの質問に答えるには、-o次のオプションがあります。

   expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.

   expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

このように:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2

関連情報