`find` 반환 값: 찾기 매뉴얼 페이지가 잘못되었습니까?

`find` 반환 값: 찾기 매뉴얼 페이지가 잘못되었습니까?

매뉴얼 find페이지에는 다음과 같이 나와 있습니다.

-execdir command {} +항상 true를 반환하지만 -execdir command {} ; 명령이 0을 반환하는 경우에만 true를 반환합니다.

그리고

종료 상태 모든 파일이 성공적으로 처리되면 find는 상태 0으로 종료되고, 오류가 발생하면 상태는 0보다 큽니다.

그러나 이것을 테스트하면 반대 동작이 나타납니다.

 $ find . -execdir false '{}' \; ; echo $?      
 0

 $ find . -execdir false '{}' \+ ; echo $?      
 1

누군가 이것을 설명할 수 있나요?

-exec대신 사용하면 -execdir동일한 결과를 얻습니다. 나는 노력 find (GNU findutils) 4.6.0했고 4.4.2.

답변1

이 "반환"은 종료 코드가 아니라 여러 작업을 함께 연결하는 데 사용되는 작업의 반환 값입니다 find. 시도하는 경우:-execdirfind

find . -execdir false '{}' \; -print

그런 다음 -print실행되지 않습니다(즉, 출력이 없음). 반면 둘 다:

find . -execdir true '{}' \; -print
find . -execdir false '{}' + -print

각 경로를 인쇄합니다.


그러나 +종료 코드를 사용하는 경우find set: 명령 호출이 0이 아닌 상태로 종료되면 0이 아닌 반면, a의 경우 ;종료 코드는 명령 결과에 (직접적으로) 영향을 받지 않습니다. 그런 행동POSIX 요구 사항-exec경우 감지할 수 없는 오류를 지적하고 싶습니다.

기본 표현식이 a로 구분되는 경우 <plus-sign>기본 표현식은 항상 true로 평가되어야 하며 기본 표현식을 평가하는 경로 이름은 컬렉션으로 집계되어야 합니다. [...]호출이 종료 상태로 0이 아닌 값을 반환하는 경우 찾기 유틸리티는 0이 아닌 종료 상태를 반환해야 합니다..

-exec ... \;종료 코드에 영향을 미치도록 지정되지 않았으므로 find기본 동작은 오류가 발생하지 않는 한 0을 종료하는 것입니다. -exec ... \;0이 아닌 값으로 종료되는 명령은 오류로 간주되지 않으므로 다른 오류가 없으면 종료 코드는 항상 0이 됩니다.

관련 정보