Xargs

xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令，以避免参数列表过长的问题。xargs的作用一般等同于大多数Unix shell中的反引号，但更加灵活易用，并可以正确处理输入中有空格等特殊字符的情况。对于经常产生大量输出的命令如find、locate和grep来说非常有用。

示例 
例如，下面的命令：
rm $(find /path -type f)

如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后，问题即获解决。
find /path -type f -print0 | xargs -0 rm

本例中xargs将find产生的长串文件列表拆散成多个子串，然后对每个子串调用rm。-print0表示輸出以null分隔（-print使用換行）；-0表示輸入以null分隔。这样要比如下使用find命令效率高的多。
find /path -type f -exec rm '{}' \;

上面这条命令会对每个文件调用"rm"命令。当然使用新版的"find"也可以得到和"xargs"命令同样的效果：
find /path -type f -exec rm '{}' +

find . -name "*.foo" | xargs grep bar
该命令大体等价于
grep bar $(find . -name "*.foo")

find . -name "*.foo" -print0 | xargs -0 grep bar
使用了GNU特殊规定的空字符。

find . -name "*.foo" -print0 | xargs -0 -t -r vi
与上面的基本相同但启动vi进行编辑。-t参数会提前打印错误信息。-r参数是一个GNU扩展，表明在无输入情况下则不构造命令执行。

find . -name "*.foo" -print0 | xargs -0 -i mv {} /tmp/trash
使用-i参数将{}中内容替换为列表中的内容。

参见
GNU parallel
pexec

参考

外部链接

手册页
 
 
 
 
 

Unix文字处理实用工具
Unix SUS2008实用工具