"find -print0" 출력을 grep하는 방법은 무엇입니까?

"find -print0" 출력을 grep하는 방법은 무엇입니까?

나는 이것을 시도했습니다 :

find /usr/lib -print0 | grep zip | xargs -0 -I{} echo "found file: {}"
find /usr/lib -print0 | grep --null zip | xargs -0 -I{} echo "found file: {}"

그러나 grep은 일치하는 바이너리 파일이 하나만 있다고 말하기 때문에 작동하지 않습니다. null 문자로 끝나는 줄을 출력하기 위해 grep을 원합니다.

전체 명령을 변경하지 않고도 이 문제를 해결할 수 있습니까? 나는 그것이 작동한다는 것을 알고 있습니다 find -name ... -exec .... 그러나 기존 명령을 수정할 수 있다면 좋을 것입니다.

답변1

사용법을 보면 --nullGNU를 사용하고 있다고 가정합니다 grep. 고려하라고 말씀하시면 됩니다데이터null 값으로 구분됨-z( --null-data) 옵션 포함, 다음 옵션을 사용하여 모든 것을 텍스트로 처리합니다 -a.

find /usr/lib -print0 |
  grep -a -z zip |
  xargs -r0 printf 'found file: %s\n'

(이를 사용하여 echo임의의 데이터를 출력할 수 없다는 점을 기억하십시오.)

--nullgrep파일 이름 출력 에만 영향을 미칩니다., 여기에는 아무런 영향이 없습니다.

언급한 대로 GNU를 사용 find하거나 GNU를 사용하지 않고도 이 작업을 완전히 수행할 수 있습니다. 하지만 경로 양쪽에 텍스트가 아닌 파일을 찾을 수 있어야 -exec하지만 (그럴 가능성은 낮지만 ):LC_ALL=Czip/usr/lib

LC_ALL=C find /usr/lib -path '*zip*' -printf 'found file: %p\n'

관련 정보