찾기에 print0 옵션을 사용하여 출력이 적습니까? This primary always evaluates to true.

매뉴얼 페이지와 다른 참조를 읽었지만 -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 개의 출력을 얻는 이유는 무엇입니까?



답변

첫 번째 예

 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 \)

어느 쪽이 왜 1 면만 인쇄하는지 분명히 알 수 있습니다.


답변