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
,而不是来自 xargs
。 xargs
确实像您期望的那样读取单个字符串,但该字符串有换行符。
另请参阅:
您没有向 xargs
提供命令,这是不正常的。提供 none 时的 default command xargs
uses 是 /bin/echo
。 xargs
从 ls
读取输出并将其拆分为单词;每个单词都成为命令 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) 的文件。
我有以下文件:
#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
,而不是来自 xargs
。 xargs
确实像您期望的那样读取单个字符串,但该字符串有换行符。
另请参阅:
您没有向 xargs
提供命令,这是不正常的。提供 none 时的 default command xargs
uses 是 /bin/echo
。 xargs
从 ls
读取输出并将其拆分为单词;每个单词都成为命令 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) 的文件。