首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解xargs

如何理解xargs
EN

Stack Overflow用户
提问于 2018-04-12 11:53:39
回答 2查看 101关注 0票数 0

说我有两个文件t1t2,它们有相同的内容:abc

现在我要删除包含字符串abc的所有文件。

因此,我尝试执行命令:grep -rl abc . | rm,但它不起作用。

然后,我添加了xargsgrep -rl abc . | xargs rm,它可以工作。

我不明白xargs做了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-12 12:19:25

grep将输出设置为stdout。但是rm不能处理来自stdin的数据(管道链接两者都是)。

相反,您希望将grep的输出作为rm的参数。因此,xargs命令“将”stdin转换为xargs第一个参数的参数,并调用该命令(第一个参数)。

作为替代,你可以

代码语言:javascript
复制
rm `grep -rl abc .`

代码语言:javascript
复制
rm $(grep -rl abc .)

但是xargs也很好地处理了一个命令的单个调用有太多的参数的情况。上面的命令会给出shell错误(参数字符串太长)。

票数 1
EN

Stack Overflow用户

发布于 2018-04-12 12:19:34

rm不从标准输入(提示时除外,比如-i)读取,而是在命令行中使用它的参数。这就是xargs为您所做的:从标准输入中读取内容,并将它们作为参数提供给rm

使用echo的示例

代码语言:javascript
复制
$ (echo a; echo b; date) | xargs echo
a b tor 12 apr 2018 14:18:50 CEST
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49795854

复制
相关文章

相似问题

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