文章目录
- 一、命令介绍
 - 二、选项参数
 - 三、命令示例
 - (一)批量重命名目录中的文件
 - (二)给多个命令传递参数
 
一、命令介绍
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
二、选项参数
以后再整理…
三、命令示例
(一)批量重命名目录中的文件
[root@htlwk0001host test]#  ls | xargs -t -i mv {} {}.bak
 
注:xargs 读取管道 | 中的数据;-i 选项告诉 xargs 用每项的名称替换 {};-t 选项指示 xargs 先打印命令,然后再执行。
(二)给多个命令传递参数
如果 xargs 要将命令行参数传给多个命令,可以使用 -I 参数。-I 指定接收命令行参数的变量名。
[root@htlwk0001host test]# cat foo.txt
one
two
three
[root@htlwk0001host test]# cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one 
two
three
[root@htlwk0001host test]# ls 
one two three
 
上面代码中,文件 foo.txt 内有三行的文本,我们希望对每一项命令行参数,执行两个命令(echo和mkdir),使用 -I file 表示 file 是命令行参数的替代字符串(就是使用 file 来指代命令行参数,所以 file 其实类似变量的作用)。执行命令时,具体的参数会替代掉 echo file; mkdir file 里面的两个 file。
具体点就是,xargs 读取管道中的数据,就是三个词:one、two、three,转换成命令行参数,由变量 file 来接收,所以首先 file=one,于是echo file; mkdir file 就变成了 echo one;mkdir one,然后执行命令 sh,而命令 sh 则在选项 -c 的作用下,把后面的字符串视为 shell 命令脚本,于是就执行这个脚本语句,也就是执行命令 echo one 和 mkdir one。
关于命令 sh,详见《Linux 命令之 sh – Shell 命令语言解释器》