web-dev-qa-db-ja.com

検索で論理ORを使用する方法は?

Bashシェルではlsは論理OR機能を使用できます(もちろん、私はls name1 name2しかし、私の実際の例はより複雑です):

ls @(name1|name2)

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

私の素朴な実装:

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

機能しません(何も出力しません)

12
JeffDror

論理ORには-oを使用できます。ただし、すべてのfind述語には論理値があるため、通常はORedのものを括弧でグループ化する必要があります。また、括弧はシェルにとっても意味があるため、それらをエスケープする必要もあります。

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

あなたの質問に答えるには、-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
5