xargs -0 产生新行

xargs -0 produce new line

我有以下文件:

#ls
test  test2  test3  test4

现在根据 xargs -0,输入是基于 null 而不是空格来修剪的,因此由于我的输入中没有 null,所以应该在一个 echo 命令中打印 4 个文件。结果是一个回显命令但是每个文件之间有一个新行:

#ls | xargs -0
test
test2
test3
test4

确保只有一个命令:

 ls | xargs -0 -p
echo test
test2
test3
test4
 ?...n

为什么每个文件之间有换行?

ls 打印到 TTY 时,它会在列中格式化文件名,但当它写入文件、管道或其他非 TTY 时,它的行为类似于 ls -1 并打印一个文件每行名称。您可以通过 运行 ls | cat 代替 ls.

进行检查

对于 ls | xargs -0,换行符来自 ls,而不是来自 xargsxargs 确实像您期望的那样读取单个字符串,但该字符串有换行符。

另请参阅:

您没有向 xargs 提供命令,这是不正常的。提供 none 时的 default command xargs uses/bin/echoxargsls 读取输出并将其拆分为单词;每个单词都成为命令 xargs 执行的参数。 -0 选项使空字符成为用于拆分的单词分隔符。因为 null 没有出现在 ls 的输出中,整个输出被认为是一个单词并作为单个参数传递给 /bin/echo,有效地导致命令行

/bin/echo 'test
test2
test3
test4'

另一方面,当 putput 不是终端时,ls 的输出包含换行符,是 属性 的 ls,正如 John 正确解释的那样。

对文件进行 xarging 时使用 find 而不是 ls!

$ find /my/path -print0 | xargs -0 -p

使用 -print0 您还可以处理文件名中使用 space (0x20) 的文件。