shell编程必需要掌握的命令-xargs

一,说xargs命令前,说一下什么是shell编程linux

什么是shell编程呢,说白了就是按必定的规则把各类命令组织起来,完成必定的事情。纯属我的理解,哈哈。无论是交互式的shell,仍是非交互的shell,它都是由一些命令组成的。sql

因此命令很重要。xargs就是其中之一,而且仍是至关重要的一个命令,为何说它重要呢,由于他和能其余命令结合使用,把一个命令的输出,看成参数传给另外一个命令。这个根find命令参数中的exec很像,可是不一样:如下4点在网上找的,第一点,是亲身体验过,家里我用的是archlinux,当你经过exec传不少数据给后面的命令时,会卡在哪儿,其余的没试过,若是有兴趣的朋友能够本身比较一下他们速度,shell

[zhangy@BlackGhost music]$ time find /home/zhangy/download/ -name ".gz" -print
real    0m0.053s
user    0m0.003s
sys     0m0.003s

1,使用find 的exec选项去处理匹配到的选项时,find 一次性将匹配到得参数传给exec执行。但有的系统,对exec 传的参数长度有限制,这样在find 命令执行几分钟后会报溢出,错误信息一般是“参数列太长”或“参数列溢出"。编程

2,xargs 与find 命令合用的时候,find 把匹配到得命令传递给xargs ,xargs 每次只获取一部分文件,而不是所有。分批处理。性能

3, 使用exec选项,会为匹配的每一个文件处理分配个进程,并非将匹配到的文件做为一个参数一次执行,这样就会触发多个进程,进而使系统性能降低,影响处理效率。spa

4,xargs则只有一个进程、但xargs 处理是否分批 ,批次大小,也会受系统些可调参数影响。进程

二,xargs应用实例
1,找出文件,改变文件所属用户
#将把当前目录下面以test开头的文件用户改成zhangy
[root@BlackGhost download]# find . -name "test*"  -print | xargs chown zhangy:users

#查看当前目录中以test开头的文件所属用户
[root@BlackGhost download]# find . -name "test*"  -print -exec ls -al {} \;
./test.sql.zip
-rw-r--r-- 1 zhangy users 1981 Feb  2 16:05 ./test.sql.zip
./test.zip
-rw-r--r-- 1 zhangy users 164 May 23 22:54 ./test.zip
2,把系统的用户统计一下
[zhangy@BlackGhost download]# cut -d: -f1 < /etc/passwd | xargs echo >> /home/zhangy/userlist.txt
3,备份文件
[zhangy@BlackGhost ddd]$ ls |xargs -i cp {} {}.bak
cp test test.bak
相关文章
相关标签/搜索