- 一、命令介绍
- 二、选项参数
- 三、命令示例
- (一)批量重命名目录中的文件
- (二)给多个命令传递参数
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 命令语言解释器》