作者:jicanmeng
时间:2016年06月10日
xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的数据分隔成为 arguments 。 因为是以空格符作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空格符的时候, xargs 可能就会误判了~他的用法其实也还满简单的!命令格式如下:
xargs [-e] command
-e
: 这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,就会停止继续工作!xargs命令通常和管道命令|一起使用,xargs读取数据后,进行处理后作为command的参数来运行command。示例如下:
[root@andy tmp]# cut -d':' -f1 /etc/passwd |head -n 3| xargs finger
Login: root Name: root
Directory: /root Shell: /bin/bash
Last login Sun Jan 11 00:41 2015 (CST) on pts/1 from 192.168.56.101
New mail received Sun May 29 00:12 2016 (CST)
Unread since Thu May 26 23:14 2016 (CST)
No Plan.
...
[root@andy tmp]# cut -d':' -f1 /etc/passwd |head -n 3| xargs -e'daemon' finger
Login: root Name: root
Directory: /root Shell: /bin/bash
Last login Sun Jan 11 00:41 2015 (CST) on pts/1 from 192.168.56.101
New mail received Sun May 29 00:12 2016 (CST)
Unread since Thu May 26 23:14 2016 (CST)
No Plan.
Login: bin Name: bin
Directory: /bin Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
[root@andy tmp]#
会使用 xargs 的原因是, 很多命令其实并不支持管线命令,因此我们可以透过 xargs 来提供该命令引用 standard input 之用!例如,ls命令就不支持管线命令,我们就可以使用xargs命令来产生ls命令的参数了:
[root@andy tmp]# ls -l
-rw-rw-r--. 1 jicanmeng jicanmeng 2682 Oct 9 2009 find_time.gif
[root@andy tmp]# find /sbin -perm +7000
/sbin/unix_chkpwd
/sbin/netreport
/sbin/pam_timestamp_check
/sbin/mount.nfs
[root@andy tmp]# find /sbin -perm +7000 | ls -l
-rw-rw-r--. 1 jicanmeng jicanmeng 2682 Oct 9 2009 find_time.gif
[root@andy tmp]# find /sbin -perm +7000 | xargs ls -l
-rwsr-xr-x. 1 root root 123776 Nov 22 2013 /sbin/mount.nfs
-rwxr-sr-x. 1 root root 8792 Nov 23 2013 /sbin/netreport
-rwsr-xr-x. 1 root root 10272 Nov 22 2013 /sbin/pam_timestamp_check
-rwsr-xr-x. 1 root root 34840 Nov 22 2013 /sbin/unix_chkpwd
[root@andy tmp]#