내가 확인한 내용은 다음과 같습니다.
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 ... {} \;