Aqui está o que verifiquei:
find mydir -maxdepth 2 -name .project -or -name .classpath
dá saída:
mydir/.project
mydir/.classpath
Enquanto isso
find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;
dá saída:
mydir/.classpath
então apenas 1 item encontrado está listado, por quê?
xargs funciona conforme esperado:
find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};
impressões:
mydir/.project
mydir/.classpath
Estou faltando alguma coisa -exec?
Responder1
Uma findexpressão é basicamente uma lista de predicados (condições booleanas). Em quase todos os contextos booleanos, incluindo findexpressões, o ANDoperador tem precedência sobre OR. Se eu adicionar alguns parênteses para ilustrar explicitamente as regras de precedência, sua segunda findexpressão será logicamente equivalente a
( -name .project ) OR ( -name .classpath AND -exec echo)
Para obter o comportamento desejado, você precisa
find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;


