如何理解xargs

时间:2018-04-12 11:53:40

标签: xargs

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

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

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

然后我添加xargsgrep -rl abc . | xargs rm并且它有效。

我无法清楚地了解xargs做了什么。

2 个答案:

答案 0 :(得分:1)

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

您希望将grep的输出作为rm的参数。所以xargs命令将stdin转换为xargs第一个参数的参数,并调用命令(第一个参数)。

作为替代方案,你可以做到

rm `grep -rl abc .`

rm $(grep -rl abc .)

但是xargs也可以处理单个调用命令的参数太多的情况。上面的命令会给你shell错误(参数字符串太长)。

答案 1 :(得分:0)

rm不读取标准输入(除了提示时,与-i一样),但在命令行中获取其参数。这就是xargs为你做的事情:从标准输入中读取内容并将它们作为参数提供给rm

echo的示例:

$ (echo a; echo b; date) | xargs echo
a b tor 12 apr 2018 14:18:50 CEST