Chinaunix首页 | 论坛 | 博客
  • 博客访问: 255581
  • 博文数量: 58
  • 博客积分: 2241
  • 博客等级: 大尉
  • 技术积分: 522
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 09:53
文章分类
文章存档

2012年(4)

2011年(19)

2010年(31)

2009年(4)

分类: LINUX

2011-10-19 17:17:19

xargsxargs是一条和的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题

例如,下面的命令:

rm `find /path -type f`

如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。

find /path -type f -print0 | xargs -0 rm

本例中xargs将产生的长串文件列表拆散成多个子串,然后对每个子串调用。这样要比如下使用find命令效率高的多。

find /path -type f -exec rm '{}' \;

上面这条命令会对每个文件调用"rm"命令。当然使用新版的"find"也可以得到和"xargs"命令同样的效果:

find /path -type f -exec rm '{}' +

xargs的作用一般等同于大多数中的,但更加灵活易用,并可以正确处理输入中有空格等特殊字符的情况。对于经常产生大量输出的命令如、和来说非常有用。

示例
  • 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

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

  • find . -name "*.foo" -print0 | xargs -0 -i mv {} /tmp/trash

使用-i参数将{}中内容替换为列表中的内容。

阅读(1083) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~