"find" 명령의 "-print" 매개변수에 대한 혼란

"find" 명령의 "-print" 매개변수에 대한 혼란

저는 리눅스를 처음 접했습니다. 명령에 대해 질문이 있습니다 find. 디렉터리 아래의 파일을 검색할 때 다음 이름의 하위 디렉터리를 건너뛰고 싶습니다.publish

find ./ -path ./publish -prune -o -iname rdesvc -type f -print

잘 작동합니다:

./release/apps/rdeSvc/server/linux/rdeSvc

그러나 매개변수를 제거하면 다음과 같습니다 -print.

find ./ -path ./publish -prune -o -iname rdesvc -type f

하위 디렉터리 이름과 검색 결과가 출력됩니다.

./publish
./release/apps/rdeSvc/server/linux/rdeSvc

혼란스러워요. publish매개변수를 제거한 후에도 하위 디렉토리 이름이 계속 출력되는 이유는 무엇입니까 -print?

내 배포판은 CentOS 6.6 64비트입니다.

답변1

이것은 조합이다find기본 동작은 다음과 같습니다.-print그리고find연산자 우선순위.

find ./ -path ./publish -prune -o -iname rdesvc -type f -print

로 설명되었다

find ./ \( -path ./publish -prune \) -o \( -iname rdesvc -type f -print \)

so ./publish가 잘리고 rdesvc일치하는 내용이 모두 인쇄됩니다.

하지만

find ./ -path ./publish -prune -o -iname rdesvc -type f

로 설명되었다

find ./ \( \( -path ./publish -prune \) -o \( -iname rdesvc -type f \) \) -print

그러니 ./publish가지치기를 해라그리고인쇄하면 rdesvc일치하는 내용이 모두 인쇄됩니다. ( -prune이 작업의 평가 결과는 입니다 true.)

관련 정보