다른 "-or" 테스트가 적용될 때 GNU가 -prune'd 디렉토리의 인쇄가 억제되는 것을 발견하는 이유는 무엇입니까? [복사]

다른 "-or" 테스트가 적용될 때 GNU가 -prune'd 디렉토리의 인쇄가 억제되는 것을 발견하는 이유는 무엇입니까? [복사]

.git다음 파일과 디렉터리가 포함된 디렉터리 가 있습니다 .

.
├── .git
│   ├── branches
│   ├── COMMIT_EDITMSG
│   ├── packed-refs
│   └── refs
├── readme.md
├── server_build.sh
└── tags

test find를 통해 GNU 명령을 실행 하면 'd 디렉토리가 인쇄됩니다 .-prunefindprune

% find . -name '.git' -prune
./.git

다른 OR 옵션을 추가하면 정리된 디렉터리가 더 이상 출력에 표시되지 않습니다.

% find . -name '.git' -prune -o -name '*.md' -print
./readme.md

이 경우 -name '.git'AND -name '*.md'테스트는 모두 true를 반환해야 하며 다른 OR 테스트를 추가하면 갑자기 테스트가 -name '.git' -prunetrue가 되지 않습니다.
첫 번째 명령문에 암시적 스위치가 추가되어 있습니까?
즉, 차례를 찾으십시오.

find . -name '.git' -prune

입력하다

find . -name '.git' -prune -print

런타임에? -print다음 테스트를 추가할 때 암시적으로 취소됩니까? 다른 "-or" 테스트를 적용할 때
-pruned 디렉토리가 인쇄되지 않는 이유는 무엇입니까 ?find

답변1

find . -name '.git' -prune

동일합니까?

find . -name '.git' -prune -print

그래서 잘라낸 다음 인쇄합니다.

find . -name '.git' -prune -o -name '*.md' -print

동일합니까?

find . \( -name '.git' -prune -true \) -o \( -name '*.md' -print \)

따라서 첫 번째 절을 실행하고, 다듬기를 수행하면 true를 실행하고(가지치기는 true를 반환함) 오른쪽 절은 실행하지 않습니다.-o

항상 인쇄됩니다.

find . \( -name '.git' -prune -o -name '*.md' \) -print
find . -name '.git' -prune -print -o -name '*.md' -print

관련 정보