xargs命令使用

功能介绍:man文档介绍为:从标准输入重建并执行命令行。xargs是可以读入stdin的数据,并且以空白符或断行字符进行分辨,将stdin的数据分割成为arguements。因为是以空格符作为分隔,所以,如果有一些文件名或者其他意义的名词内含空格符的时候,xargs可能就会误判了。

xargs选项表:

选项 衔接的参数及意义
-O 如果输入的stdin含有特殊字符,例如`,\,空格键等字符时,这个参数可以将它还原成一般字符。这个参数可以用于特殊状态
-e 这个是EOF(end of file)的意思。后面可以接一个字符串,当xargs分析到这个字符串时,就会停止继续工作
-p 当执行每个命令的参数时,都会询问用户的意思;可以与-n一起使用,在执行指定的次数命令的参数时,询问用户的意思
-n 后面衔接次数,每次command命令执行时,要使用几个参数的意思
-i 该参数可以类似于find中的{},具体意思看后面案例2就会明白

当xargs没有衔接任何命令时,默认以echo来进行输出。

 

使用案例:

# 案例前提
]# ls /tmp/file*
/tmp/file1  /tmp/file2  /tmp/file3  /tmp/file4  /tmp/file5

# 案例1:不加选项的使用结果
]# ls /tmp/file* | head -n2 | xargs stat 
  文件:"/tmp/file1"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:17345296    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 14:39:25.102089231 +0800
最近更改:2019-03-16 14:39:25.102089231 +0800
最近改动:2019-03-16 14:39:49.388367674 +0800
创建时间:-
  文件:"/tmp/file1_new"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:16777289    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 15:13:55.190823010 +0800
最近更改:2019-03-16 15:13:55.190823010 +0800
最近改动:2019-03-16 15:13:55.190823010 +0800
创建时间:-


# 案例2:-i选项的使用
]# ls /tmp/file* | xargs -i touch {}_new
[root@localhost test]# ll /tmp/file*_new
-rw-r--r--. 1 root root 0 3月  16 15:13 /tmp/file1_new
-rw-r--r--. 1 root root 0 3月  16 15:13 /tmp/file2_new
-rw-r--r--. 1 root root 0 3月  16 15:13 /tmp/file3_new
-rw-r--r--. 1 root root 0 3月  16 15:13 /tmp/file4_new
-rw-r--r--. 1 root root 0 3月  16 15:13 /tmp/file5_new

# 案例3:案例1加-p选项(注意观察输出结果第一行的交互)
]# ls /tmp/file* | head -n2 | xargs -p stat 
stat /tmp/file1 /tmp/file1_new ?...y
  文件:"/tmp/file1"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:17345296    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 14:39:25.102089231 +0800
最近更改:2019-03-16 14:39:25.102089231 +0800
最近改动:2019-03-16 14:39:49.388367674 +0800
创建时间:-
  文件:"/tmp/file1_new"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:16777289    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 15:13:55.190823010 +0800
最近更改:2019-03-16 15:13:55.190823010 +0800
最近改动:2019-03-16 15:13:55.190823010 +0800
创建时间:-


# 案例4:案例3加-n选项(注意输出结果中的交互变多了)
]# ls /tmp/file* | head -n2 | xargs -p -n1 stat
stat /tmp/file1 ?...y
stat /tmp/file1_new ?...  文件:"/tmp/file1"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:17345296    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 14:39:25.102089231 +0800
最近更改:2019-03-16 14:39:25.102089231 +0800
最近改动:2019-03-16 14:39:49.388367674 +0800
创建时间:-
y
  文件:"/tmp/file1_new"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:16777289    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 15:13:55.190823010 +0800
最近更改:2019-03-16 15:13:55.190823010 +0800
最近改动:2019-03-16 15:13:55.190823010 +0800
创建时间:-

//案例4用-n指定了交互次数,但是显示的结果有些混乱,注意观察输出结果第2行和第11行的y,第二次交互在第一次交互得到输出结果之前就显示了,可能我描述的不是很清楚,但自己测试一下这个过程就知道我想说什么了。


# 案例5:-e选项使用
]# ls /tmp/file* | xargs -e"/tmp/file3" stat
  文件:"/tmp/file1"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:17345296    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 14:39:25.102089231 +0800
最近更改:2019-03-16 14:39:25.102089231 +0800
最近改动:2019-03-16 14:39:49.388367674 +0800
创建时间:-
  文件:"/tmp/file2"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:17345305    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2019-03-16 14:39:26.300102966 +0800
最近更改:2019-03-16 14:39:26.300102966 +0800
最近改动:2019-03-16 14:39:49.388367674 +0800
创建时间:-

 

 

xargs最重要的功能还是和find一起使用,find是一次性查找符合条件的所有文件,并一同传递给-exec或-ok后面指定的命令,但有些命令不能接收过长的参数,此时就需要使用到xargs了,xargs的数据自动分隔功能以及-n参数可以很好的解决这个问题。

 


本博客参考:《鸟哥的Linux私房菜基础学习篇》

你可能感兴趣的:(Linux运维)