Como usar OR lógico no find?

12

No bash shell lspode usar uma funcionalidade lógica OU através (é claro que eu também poderia fazer, ls name1 name2mas meus exemplos verdadeiros são mais complicados):

ls @(name1|name2)

Existe uma maneira de fazer isso usando find?

Minha implementação ingênua:

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

não funciona (apenas não gera nada)

JeffDror
fonte
4
Você leu a OPERATORSseção da página de findmanual?
Steeldriver #

Respostas:

19

Você pode usar -opara lógico OR. Cuidado, porém, que todos os findpredicados têm valores lógicos; portanto, você geralmente precisará agrupar as ORcoisas com parênteses. E como parens também tem um significado para o shell, você também precisará escapar deles:

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

Para responder sua pergunta, você pode usar a -oopçã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.

como isso:

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