나는 이것을 시도했습니다 :
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
사용법을 보면 --null
GNU를 사용하고 있다고 가정합니다 grep
. 고려하라고 말씀하시면 됩니다데이터null 값으로 구분됨-z
( --null-data
) 옵션 포함, 다음 옵션을 사용하여 모든 것을 텍스트로 처리합니다 -a
.
find /usr/lib -print0 |
grep -a -z zip |
xargs -r0 printf 'found file: %s\n'
(이를 사용하여 echo
임의의 데이터를 출력할 수 없다는 점을 기억하십시오.)
--null
grep
파일 이름 출력 에만 영향을 미칩니다., 여기에는 아무런 영향이 없습니다.
언급한 대로 GNU를 사용 find
하거나 GNU를 사용하지 않고도 이 작업을 완전히 수행할 수 있습니다. 하지만 경로 양쪽에 텍스트가 아닌 파일을 찾을 수 있어야 -exec
하지만 (그럴 가능성은 낮지만 ):LC_ALL=C
zip
/usr/lib
LC_ALL=C find /usr/lib -path '*zip*' -printf 'found file: %p\n'