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)


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.