使用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

它们在视觉上看起来是相同的,但由于这是关于空字符的,所以这并没有说明太多。如果我通过 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不会被执行。

相关内容