xargs – construct argument list(s) and execute utility
xargs [options] [command [initial-arguments]]
The xargs utility reads space, tab, newline and end-of-file delimited strings from the standard input and executes utility with the strings as arguments.
xargs 从标准输入读入字符串,并将用空格、tab、换行符和 eof 分隔后的字符串组作为参数传递给其它程序。
说的直白一点:xargs 把标准输入的字符串用一些常见的(空格、tab、换行、eof)或者指定的(-d)分隔符切成一段一段的,然后传给后边的 command,让其做为参数执行。
举个例子,找到当前目录下所有 mp3 文件,乱序之后让 sox 进行播放。
1
find ./ -name "*.mp3" | sort -R | xargs -i sox {} -t alsa plughw:1,0
xargs命令与管道符的区别
管道 是将前一个命令的标准输出作为后一个命令的标准输入使用 - xargs 是将前一个命令的标准输出作为后一个命令的参数使用
参数
-0:以 \0 作为分隔符,特殊字符将当作文本符号处理; -d:指定分隔符,默认分隔字符为空白字符; -a:指定命令标准输入的来源文件; -p:每执行一个分段时,询问一次用户是否执行; -t:表示先打印执行的命令再输出; -n NUM:表示一个分段包含的参数个数,参数之间以分隔符隔开,默认是将所有的参数当作一个分段输出; -i:用于将分段分批传递给其后的 {} 进行输出,分段会替换 {} 所在的位置进行输出; -I “FLAG”:可指定分段的替换符号,分段会分批替换到符号所在的位置进行输出执行;
实例
查找相应的文件并删除:
1
2
$ find /tmp -name hello -type f | xargs -t rm
rm /tmp/hello
将文件批量重命名:
1
$ ls | xargs -i mv {} {}.bak
指定每次处理的参数个数:
1
2
3
4
5
$ cut -d: -f1 /etc/passwd | xargs -n 3 echo
root daemon bin
sys sync games
man lp mail
...