¿Cómo usar el OR lógico en find?

12

En bash shell lspuede usar una funcionalidad OR lógica (por supuesto, también podría hacerlo, ls name1 name2pero mis verdaderos ejemplos son más complicados):

ls @(name1|name2)

¿Hay alguna manera de hacer esto usando find?

Mi ingenua implementación:

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

no funciona (simplemente no genera nada)

JeffDror
fuente
44
¿Leíste la OPERATORSsección de la página de findmanual?
steeldriver 01 de

Respuestas:

19

Se puede usar -opara lógico OR. Sin embargo, findtenga en cuenta que todos los predicados tienen valores lógicos, por lo que generalmente necesitará agrupar las ORcosas junto con los pares. Y dado que los parens también tienen un significado para el shell, también necesitarás escapar de ellos:

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

Para responder a su pregunta, puede usar la -oopción:

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

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

Me gusta esto:

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