Gnu find를 사용하면 -print0과 -printf "%p\0"의 ​​차이점은 무엇입니까?

Gnu find를 사용하면 -print0과 -printf "%p\0"의 ​​차이점은 무엇입니까?

터미널에서 실행할 수 있습니다 ...

find . -type f -print0
./testdir/testfile2.txt./testdir/testfile.txt

그런 다음...

find . -type f -printf "%p\0"
./testdir/testfile2.txt./testdir/testfile.txt

시각적으로 동일해 보이지만 이는 null 문자에 관한 것이므로 그다지 의미가 없습니다. Ruby repl을 통해 실행하는 경우:

2.5.1 :001 > `find . -type f -print0`
 => "./testdir/testfile2.txt\u0000./testdir/testfile.txt\u0000" 

그런 다음

2.5.1 :002 > `find . -type f -printf "%p\0"`
Traceback (most recent call last):
        3: from /usr/share/rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
        2: from (irb):2
        1: from (irb):2:in ``'
ArgumentError (string contains null byte)

-print0옵션 출력과 의 차이점은 무엇입니까 printf?

테스트 시스템 정보:

이름:Linux XPS-15-9570 4.15.0-30-generic #32-Ubuntu SMP Thu Jul 26 17:42:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

루비: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux].

답변1

차이가 없어야 합니다. 파이프를 통한 출력은 cat -v인쇄할 수 없는 문자를 이스케이프합니다.

어쩌면 사물을 수정하는 특별한 로캘이 있을 수도 있습니다 -print0. 적어도 내 en_US.UTF-8 설정에는 차이가 없습니다. 아마도 locale귀하의 질문에 이것의 결과를 추가하십시오 .

Ruby에 대한 테스트로 인해 Ruby가 \0자체적 으로 해석되고 find실행되지 않을 수도 있습니다.

관련 정보