首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xargs -0生产新生产线

xargs -0生产新生产线
EN

Stack Overflow用户
提问于 2018-12-12 14:35:33
回答 3查看 1.5K关注 0票数 3

我有以下文件:

代码语言:javascript
运行
复制
#ls
test  test2  test3  test4

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

代码语言:javascript
运行
复制
#ls | xargs -0
test
test2
test3
test4

为了确保只有一个命令:

代码语言:javascript
运行
复制
 ls | xargs -0 -p
echo test
test2
test3
test4
 ?...n

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-12 14:39:27

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

ls | xargs -0中,新行来自ls,而不是xargs。实际上,xargs正在按您的预期读取单个字符串,但该字符串有换行符。

还请参见:

票数 3
EN

Stack Overflow用户

发布于 2018-12-12 14:50:01

您没有向xargs提供命令,这是不寻常的。如果没有提供使用,则为/bin/echoxargs读取来自ls的输出并将其拆分为单词;每个单词成为xargs命令执行的一个参数。-0选项使空字符成为用于拆分的单词分隔符。因为在ls的输出中没有出现null,所以整个输出被认为是一个单词,并作为一个参数传递给/bin/echo,从而有效地导致命令行。

代码语言:javascript
运行
复制
/bin/echo 'test
test2
test3
test4'

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

票数 1
EN

Stack Overflow用户

发布于 2018-12-12 15:47:20

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

代码语言:javascript
运行
复制
$ find /my/path -print0 | xargs -0 -p

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53745351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档