find의 print0 옵션이 더 적은 출력을 제공합니까?

find의 print0 옵션이 더 적은 출력을 제공합니까?

매뉴얼 페이지와 기타 참고 자료를 읽었지만 find 와 option 의 동작에 대해 여전히 혼란스럽습니다 -print0.

-print0      This primary always evaluates to true.  It prints the pathname of
             the current file to standard output, followed by an ASCII NUL
             character (character code 0).

첫 번째 명령:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null
/some/path//asdf199Intro-5kqlw.jpeg
/some/path/199intro-2jjaj.JPEG
/some/path/199intro-3.jpg
/some/path/wuer199intro-4.JPG
/some/path/xbzf199INTRO-1.jpg

두 번째 명령:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null -print0
/some/path/136intro-3.jpg/some/path/wuer136intro-4.JPG/some/path/xbzf136INTRO-1.jpg

두 번째 명령의 파일 이름이 널 문자로 구분되어 있는 것을 볼 수 있는데 왜 위의 5개 대신 3개의 출력이 표시됩니까?

답변1

당신의 첫 번째 예

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg"

같지 않음

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" -print

그것은 동등하다

 find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print

표현식에 가 아닌 다른 작업이 포함되어 있으면 -purge암시적 인쇄가 더 이상 추가되지 않습니다 . 당신이 원하는

find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print0 2> /dev/null

3개의 파일 이름만 얻는 이유는 해당 파일 이름이 두 번째 조건(작업이 포함된 조건)과 일치하기 때문입니다. 입력한 내용의 진정한 의미

find /some/path/ \( -iname "*intro*jpeg" \) -o \( -iname "*intro*jpg" -print0 \)

이를 통해 한쪽 면에만 인쇄되는 이유가 분명해지기를 바랍니다.

관련 정보