1 votos

¿Por qué encontrar y exec con múltiples condiciones ' trabaja sin paréntesis?

Tengo dos muy similar find manda sola que trabaja. Ya que es importante, debo mencionar que no hay ningún archivo con .c o .hpp extensiones.

# That one works
find ~/src/ \( -type f -iname '*.cpp' -or -iname '*.h' -or -iname '*.c' -or -iname '*.hpp' \) -exec echo {} \;
# That one doesn't
find ~/src/ -type f -iname '*.cpp' -or -iname '*.h' -or -iname '*.c' -or -iname '*.hpp' -exec echo {} \;

1voto

Michael Zhou Puntos 167

Bueno, ni funcionar como se espera. Echemos un vistazo a uno que "no funciona" y aplicar el paréntesis y la lógica que están implícitas.

find ~/src \( -type f -a -iname '*.cpp' \) -or \( -iname '*.h' \) -or \( -iname '*.c' \) -or \( -iname '*.hpp' \) -exec echo {} \;

Ninguna acción se aplica a los archivos que terminan en cpp, o de objetos del sistema de archivos que terminan en h y c. Sólo los objetos del sistema de archivos que terminan en la hpp se hizo eco porque -exec niega el comportamiento predeterminado de find a imprimir. Se podría añadir -exec echo {} \; o -print al final de cada uno encerrado entre paréntesis, pero eso es tonto.

Vamos a arreglar "la que funciona"

find ~/src -type f \( -iname '*.cpp' -or -iname '*.h' -or -iname '*.c' -or -iname '*.hpp' \) -exec echo {} \;

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X