xargs -0产生新行

时间:2018-12-12 14:35:34

标签: linux bash shell xargs

我有以下文件:

#ls
test  test2  test3  test4

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

#ls | xargs -0
test
test2
test3
test4

确保只有一个命令:

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

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

3 个答案:

答案 0 :(得分:4)

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

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

另请参见:

答案 1 :(得分:1)

您没有向xargs提供命令,这很不正常。如果未提供default command xargs uses,则为/bin/echoxargs读取ls的输出并将其拆分为单词;每个单词成为xargs执行命令的参数。 -0选项使空字符成为用于分割的单词定界符。由于ls的输出中没有出现null,因此整个输出被视为一个单词,并作为单个参数传递给/bin/echo,有效地产生了命令行

/bin/echo 'test
test2
test3
test4'

正如约翰正确解释的那样,当putput不是终端时,ls的输出包含换行符,则是ls的属性。

答案 2 :(得分:0)

对文件进行大容量处理时,请使用find而不是ls

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

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