首页 > Shell脚本, 网站数据分析 > xargs命令-shell学习笔记
2013七月4

xargs命令-shell学习笔记

对于这个理解不是很好,需要再研究下:

  在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。不幸的是,有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

Find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

百科名片

xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
例如,下面的命令:

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

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

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

xargs [ -p ] [ -t ] [ -e [ EOFString ] ] [ -E EOFString ] [ -i [ ReplaceString ] ] [ -I ReplaceString ] [ -l [ Number ] ] [ -L Number ] [ -n
Number [ -x ] ] [ -s Size ] [ Command [ Argument ... ] ]

注: 不要在小写标志和参数之间放置空格。

描述

生成的命令行长度是 Command 和每个作为字符串对待的Argument(包括每个字符串的空字节终结符)的大小的总和(以字节为单位)。xargs 命令限制命令行的长度。当构造的命令行运行时,组合的Argument 和环境列表不能超出 ARG_MAX字节。在这个约束下,如果不指定 -n 或 -s 标志,缺省命令行长度至少是由LINE_MAX 指定的值。

文章作者:houzhi
本文地址:http://www.hozseo.com/289.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论

使用新浪微博登陆