xargs命令

作者:jicanmeng

时间:2016年06月10日


xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的数据分隔成为 arguments 。 因为是以空格符作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空格符的时候, xargs 可能就会误判了~他的用法其实也还满简单的!命令格式如下:

xargs [-e] command

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]#

参考资料

  1. 鸟哥的linux私房菜
    http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php#xargs