find의 -exec가 하나의 결과에서만 실행되는 이유는 무엇입니까?

find의 -exec가 하나의 결과에서만 실행되는 이유는 무엇입니까?

내가 확인한 내용은 다음과 같습니다.

find mydir -maxdepth 2 -name .project -or -name .classpath

출력을 제공합니다 :

mydir/.project
mydir/.classpath

그 동안에

find mydir -maxdepth 2 -name .project -or -name .classpath -exec echo {} \;

출력을 제공합니다 :

mydir/.classpath

발견된 항목이 1개만 나열됩니다. 이유는 무엇입니까?

xargs는 예상대로 작동합니다.

find mydir -maxdepth 2 -name .project -or -name .classpath | xargs -I {} echo {};

인쇄물:

mydir/.project
mydir/.classpath

내가 뭔가를 놓치고 있는 걸까 -exec?

답변1

표현식은 find기본적으로 술어(부울 조건)의 목록입니다. find표현식을 포함한 거의 모든 부울 컨텍스트에서 AND연산자가 OR. 우선순위 규칙을 명시적으로 설명하기 위해 몇 가지 괄호를 추가하면 두 번째 find표현식은 논리적으로 다음과 동일합니다.

( -name .project ) OR ( -name .classpath AND -exec echo)

원하는 동작을 얻으려면 다음이 필요합니다.

find mydir -maxdepth 2 \( -name .project -o -name .classpath \) -exec ... {} \;

관련 정보