说我有两个文件t1
和t2
,它们的内容相同:abc
。
现在我要删除包含字符串abc
的所有文件。
所以我尝试执行命令:grep -rl abc . | rm
但它不起作用。
然后我添加xargs
:grep -rl abc . | xargs rm
并且它有效。
我无法清楚地了解xargs
做了什么。
答案 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