Home xargs
Post
Cancel

xargs

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
...
This post is licensed under CC BY 4.0 by the author.