在Linux中没有括号的xargs之间的差异弯曲是什么


18

我想知道这有什么区别

ls | xargs rm

ls | xargs -i{} rm {}

两者都为我工作

Answers:


19

xargs rmrm使用所有参数作为空格分隔的参数进行调用。

xargs -i{} rm {}将为rm {}每个参数调用,{}并将被当前参数替换。

如果您有2个参数a.txtb.txtxargs rm 将调用此

rm a.txt b.txt

但是xargs -i{} rm {}会打电话

rm a.txt
rm b.txt

这是因为-ioption隐含了-L 1option,这意味着该命令每次rm仅占用1一行。每行仅包含1个参数。

检查此Ideone链接以了解更多信息。


哪个更好

1
@ user19140477031取决于您要执行的操作。因为rm没关系
Shiplu Mokaddim

3

使用花括号,它将rm为每个文件生成一个进程。如果不使用花括号,xargs则会将尽可能多的文件名传递给每个rm命令。

比较

ls | xargs echo

ls | xargs -i echo '{}'

2

-i选项(等效于--replace)创建一种占位符,其中xargs存储刚收到的输入。在第二个命令中,占位符为“ {}”,它的作用类似于find -exec选项。定义后,xargs将用整个输入行替换此占位符。如果您不喜欢“ {}”名称,则可以定义自己的名称:

ls | xargs -iPLACEHOLDER回声PLACEHOLDER

在您的情况下,两个命令都产生相同的结果。在第二种形式中,您只是使用-i选项明确显示了默认行为。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.