¿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)


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.