매뉴얼 페이지와 다른 참조를 읽었지만 -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 면만 인쇄하는지 분명히 알 수 있습니다.