찾기에 print0 옵션을 사용하여 출력이 적습니까?


10

매뉴얼 페이지와 다른 참조를 읽었지만 -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
기술적으로, 그들이있는 거 널 (null)이 종료 , NOT NULL 분리. (마지막 경로 이름을 포함하여 모든 경로 이름 뒤에 NUL이 있습니다.)
cjm

답변:


12

첫 번째 예

 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 면만 인쇄하는지 분명히 알 수 있습니다.


참고로 다음을 사용하여 찾기 표현식을 단순화 할 수 있습니다. find /some/path -iregex '.*intro.*\.jpe?g'... 현재 하나의 표현식 만 있으므로 cjm으로 강조 표시되는 문제를 피할 수 있습니다.
cas

@cjm 괄호가 하루를 저장했습니다. 스크립트에서 0 일 버그를 수정했습니다 !!!
leesei

@mltsy 혼란스럽지 않고 정규 표현식 ;-).
leesei
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.