Gnu findを使用すると、-print0と-printf "%p \ 0"の違いは何ですか?

Gnu findを使用すると、-print0と-printf

端末で実行できます...

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実行されないことがあります。

おすすめ記事