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 ... {} \;

관련 정보