.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