![다른 "-or" 테스트가 적용될 때 GNU가 -prune'd 디렉토리의 인쇄가 억제되는 것을 발견하는 이유는 무엇입니까? [복사]](https://linux55.com/image/90752/%EB%8B%A4%EB%A5%B8%20%22-or%22%20%ED%85%8C%EC%8A%A4%ED%8A%B8%EA%B0%80%20%EC%A0%81%EC%9A%A9%EB%90%A0%20%EB%95%8C%20GNU%EA%B0%80%20-prune'd%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%EC%9D%B8%EC%87%84%EA%B0%80%20%EC%96%B5%EC%A0%9C%EB%90%98%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EB%B0%9C%EA%B2%AC%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
.git
다음 파일과 디렉터리가 포함된 디렉터리 가 있습니다 .
.
├── .git
│ ├── branches
│ ├── COMMIT_EDITMSG
│ ├── packed-refs
│ └── refs
├── readme.md
├── server_build.sh
└── tags
test find
를 통해 GNU 명령을 실행 하면 'd 디렉토리가 인쇄됩니다 .-prune
find
prune
% 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' -prune
true가 되지 않습니다.
첫 번째 명령문에 암시적 스위치가 추가되어 있습니까?
즉, 차례를 찾으십시오.
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