Como usar o OR lógico em find?

8

No bash shell ls pode usar uma funcionalidade OR lógica (obviamente, eu também poderia fazer ls name1 name2 , mas 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 produz nada)

    
por JeffDror 01.07.2015 / 14:38

2 respostas

14

Você pode usar -o para lógico OR . No entanto, esteja ciente de que todos os predicados find têm valores lógicos, então você geralmente precisará agrupar OR ed coisas junto com parens. E como os parênteses também têm um significado para o shell, você também precisará escapar deles:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print
    
por 01.07.2015 / 14:46
5

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

assim:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
    
por 01.07.2015 / 14:45