매뉴얼 페이지와 기타 참고 자료를 읽었지만 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 \)
이를 통해 한쪽 면에만 인쇄되는 이유가 분명해지기를 바랍니다.