![-print를 명시적으로 추가할 때 find(1)의 동작이 다른 이유는 무엇입니까?](https://rvso.com/image/1457450/-print%EB%A5%BC%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%B6%94%EA%B0%80%ED%95%A0%20%EB%95%8C%20find(1)%EC%9D%98%20%EB%8F%99%EC%9E%91%EC%9D%B4%20%EB%8B%A4%EB%A5%B8%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.png)
매뉴얼 페이지는 다음과 같이 find(1)
말합니다.
표현식에 이외의 작업이 포함되어 있지 않으면
-prune
표현식
그러나 이 두 표현에는 차이가 있는 것 같습니다.
$ find . -path '*fo*' -prune -o -type f -print
./bar/xzyzzy
$ find . -path '*fo*' -prune -o -type f
./foo
./bar/xzyzzy
./foo
후자의 출력에 왜 포함됩니까 ?
다음을 사용하여 위의 예제 디렉터리 트리 구조를 만들었습니다.
$ cd $(mktemp -d)
$ mkdir foo
$ mkdir bar
$ touch foo/quux
$ touch bar/xzyzzy
find --version
나를 위한 결과는 다음과 같습니다.
find (GNU findutils) 4.4.2`
답변1
아, 제가 직접 해결한 것 같아요...
전자의 경우 다음이 -print
수행됩니다.오직-path '*fo*'
의 단락 동작으로 인해 첫 번째 조건( )이 참이 아닐 때 -o
.
그러나 두 번째 경우에는 암시적 -print
작업이 수행됩니다.전체-path '*fo*'
표현식이 true인 경우 - is 가 true 인 경우에도 마찬가지입니다.또는 -type f
사실이다. 즉, 내 질문의 두 명령은 다음과 같습니다.
$ find . \( -path '*fo*' -prune \) -o \( -type f -print \)
./bar/xzyzzy
... 그리고:
$ find . \( -path '*fo*' -prune -o -type f \) -print
./foo
./bar/xzyzzy
어쨌든 그런 것 같아요 :)