linux中args⼯具
三、xargs
xargs - build and execute command lines from standard input
在使⽤find命令的-exec选项处理匹配到的⽂件时, find命令将所有匹配到的⽂件⼀起传递给exec执⾏。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运⾏⼏分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs 命令的⽤处所在,特别是与find命令⼀起使⽤。
find命令把匹配到的⽂件传递给xargs命令,⽽xargs命令每次只获取⼀部分⽂件⽽不是全部,不像-exec选项那样。这样它可以先处理最先获取的⼀部分⽂件,然后是下⼀批,并如此继续下去。
在有些系统中,使⽤-exec选项会为处理每⼀个匹配到的⽂件⽽发起⼀个相应的进程,并⾮将匹配到的⽂件全部作为参数⼀次执⾏;这样在有些情况下就会出现进程过多,系统性能下降的问题,因⽽效率不⾼;
⽽使⽤xargs命令则只有⼀个进程。另外,在使⽤xargs命令时,究竟是⼀次获取所有的参数,还是分批取得参数,以及每⼀次获取参数的数⽬都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令⼀起使⽤的,并给出⼀些例⼦。
下⾯的例⼦查系统中的每⼀个普通⽂件,然后使⽤xargs命令来测试它们分别属于哪类⽂件
#find . -type f -print | xargs file
在当前⽬录下查所有⽤户具有读、写和执⾏权限的⽂件,并收回相应的写权限:
# ls -l
# find . -perm -7 -print | xargs chmod o-w
# ls -l
⽤grep命令在所有的普通⽂件中搜索hello这个词:
# find . -type f -print | xargs grep "hello"
⽤grep命令在当前⽬录下的所有普通⽂件中搜索hello这个词:
# find . -name \* -type f -print | xargs grep "hello"
find查命令的使用
注意,在上⾯的例⼦中, \⽤来取消find命令中的*在shell中的特殊含义。
find命令配合使⽤exec和xargs可以使⽤户对所匹配到的⽂件执⾏⼏乎所有的命令。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。