xargs的用法还不是很熟悉,特摘抄一段鸟哥的讲解加深印象。
以字面意思来看,x是乘号,args是参数的意思,所以说这个命令是产生某个指令参数的意思。xargs可以读入stdin的数据,并且以空格符或断行符作为分辨,将stdin的资料分隔成为参数。因为是以空格作为分隔,所以如果有些文件名或其他意义的名词内含有空格时,xargs可能会误判。下面是该命令的用法:
1.xargs [-0epn] command
选项和参数:
-0 :如果输入的stdin含有特殊字符,这个-0参数可以把它还原成一般字符。该参数用于处理特殊字符。
-e :这是EOF的意思。后面接一个字符串,当xargs分析到这个字串时,就会停止继续工作。
-p :在执行每个指令的参数时,都会询问使用者的意思。
-n :后接次数,每次command命令执行时,要使用几个参数的意思。
当xargs的后面没有接任何指令的时候,默认是以echo进行输出。
examples:
1.将/etc/passwd内的第一栏取出,仅取三行,使用finger将每个帐号内容显示出来
cut -d ':' -f1 /etc/passwd | head -n 3 | xargs finger
xargs 可以将前面指令的输出结果处理成finger的参数
2.增加需求:每次执行finger时,都要询问使用者是否动作?
cut -d ':' -f1 /etc/passwd | head -n 3 | xargs -p finger
-p参数可以在执行时询问用户是否执行该命令
3。增加需求:将所有的/etc/passwd内的帐号都以finger查阅,但一次仅查阅五个帐号
cut -d ':' -f 1 /etc/passwd | xargs -p -n 5 finger
-n参数可以将前面的输出分成数个部分,每个部分再分别执行,这样很有必要,因为同常每个命令后接的参数不是无限制的。
4。增加需求:待分析到lp时就结束这串指令
cut -d ':' -f1 /etc/passwd | xargs -p -e'lp' finger
注意-e与lp之间没有空格
加上-e参数,xargs在处理到lp时,后面的其他输入内容就被舍弃掉了
很多时候,使用xargs是因为指令不支持管线操作,因此我们可以通过xagrs来提供该指令引用标准输入之用。
example:
5.找出/sbin下具有特殊权限的文档名,并使用ls -l列出详细属性
find /sbin -perm +7000 | ls -l
如果这样操作的话,仅仅列出当前目录下所有的档案,相当于只执行了ls -l,这是因为ls -l不支持管线操作的缘故。
find /sbin -perm +7000 | xargs ls -l
这样做,xargs会将前面的find的结果作为ls -l的参数输入,才能得到我们想要的结果。