
Esto es lo que verifiqué:
find mydir -maxdepth 2 -name .project -or -name .classpath
da salida:
mydir/.project
mydir/.classpath
Mientras tanto
find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;
da salida:
mydir/.classpath
entonces solo aparece 1 artículo encontrado, ¿por qué?
xargs funciona como se esperaba:
find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};
huellas dactilares:
mydir/.project
mydir/.classpath
¿Me estoy perdiendo algo sobre -exec
?
Respuesta1
Una find
expresión es básicamente una lista de predicados (condiciones booleanas). En casi todos los contextos booleanos, incluidas find
las expresiones, el AND
operador tiene prioridad sobre OR
. Si agrego algunos paréntesis para ilustrar explícitamente las reglas de precedencia, su segunda find
expresión es lógicamente equivalente a
( -name .project ) OR ( -name .classpath AND -exec echo)
Para obtener el comportamiento deseado, necesita
find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;