xargs命令手册
概述
xargs使用标准输入来构建并执行命令行。xargs默认从标准输入读取数据,并以空白和换行来切割数据项,然后使用这些数据项作为命令的参数来执行命令,所以xargs通常用来和其他命令一起工作,如果没有指定其它命令,默认使用/bin/echo命令作为xargs构建的命令行命令。xargs后面的命令会执行一次或多次,直到用尽从标准输入读取到的参数为止。
和管道命令的区别
- 管道命令是将上一个命令的标准输出连接到下一个命令的标准输入,形式是A|B,两条命令都是完成的shell命令,并且前面的命令A必须有输出,后面的命令B必须接受标准输入作为参数,才能使用管道
- xargs命令本身接受标准输入,可以很容易的和其它命令连接如使用管道。但xargs的工作原理是先读取输入,该输入可以是标准输入,也可以是从管道读取,也可以是从文件读取,然后使用分隔符解析输入,然后使用分割后的数据项构建一个可执行的命令行,最后执行该命令行。所以xargs可以灵活的将不可以使用管道或标准输入的命令和其他命令连接到一起,这也是xargs命令的作用所在
语法
xargs [options] [command [initial-arguments]]
options:xargs的选项,可选
command:xargs构建的命令,可选,缺省为/bin/echo
initial-arguments:xargs构建的命令行的初始化参数,可选
选项
-0, --null
- 0或null就是c字符串的终结符
- linux中文件名可以使用空白或换行,所以如果使用xargs默认的数据分隔符-空白或换行,可能无法正确处理这一情况
- 该选项表示使用一个null字符也就是0来分割数据项,而不是使用默认的空白或换行。
- 使用该选项时,其余任何字符都无特殊含义,只使用这些字符的字面量,并且禁用end-of-file字符串
- 使用该选项时输入数据最好是使用null来分割的数据,如find -print0就会产生这种格式的输入
-a file, --arg-file=file
- arg-file:参数文件
- xargs默认从标准输入读取数据项,使用该参数表示从指定的参数文件file读取数据项
-d delim, --delimiter=delim
- delimiter:分割字符
- 使用指定的分割字符来分割数据项,可以使用c风格的逃逸字符如\n
- 该选项会禁用end-of-file字符串
-E eof-str
- 设置end-of-file字符串为eof-str
- 输入行中如果出现EOF字符串,剩余的输入将会被忽略
-e[eof-str], --eof[=eof-str]
- 作用和-E选项相同
- -E选项是POSIX兼容的选项,-e不是
- 如果使用-E选项则必须指定eof-str参数,使用-e选项不必
- 使用-e选项不指定参数,则该参数不起作用,表示不使用EOF字符串
- 如果xargs既不使用-E选项,也没有使用-e选项,那么不使用EOF字符串
-I replace-str
- 助记符可理解为iterate或initial-arguments
- 逐个使用从标准输入读取的数据项替换命令行初始化参数中出现的该选项指定的replace-str
- 使用该选项时使用换行分割数据项
- 使用该选项时,隐含使用-x 和-L 1选项
-i[replace-str], --replace[=replace-str]
- 如果指定replace-str参数,作用与-Ireplace-str相同
- 如果不指定replace-str参数,作用等价于-I{}
- 该选项不推荐使用,使用-I选项
-L max-lines
- 每一次构建命令行使用的最大非空白输入行数
- max-lines参数必须
-l[max-lines], --max-lines[=max-lines]
- 同-L选项
- max-lines参数可选,缺省为1,省略等价于-L 1
- 不推荐使用该选项,推荐使用符合POSIX标准的-L选项
-n max-args, --max-args=max-args
- 每一次构建命令行使用的最大数据项数
- 如果同时指定了-s选项,并且构建的命令行字符总数超过了-s选项指定的值,那么-s选项优先生效,-n选项的指定的参数将缩水,除非指定了-x选项,xargs将退出执行
-s max-chars, --max-chars=max-chars
- 每一次构建命令行使用的最大字符数
- 该计数包含命令和初始化参数以及尾部的null字符
-p, --interactive
- 助记符可理解为prompt,提示
- 每次构建完命令行就提示构建的命令,然后读取用户输入,如果输入以y或Y开头,就执行构建的命令,否则不执行,并构建下一条命令
- 该选项使用时,隐含使用-t选项
-t, --verbose
- 助记符可理解为type
- 在执行构建的命令行之前,打印到stderr
-r, --no-run-if-empty
- 如果输入是空白,也即无非空白行,就不执行命令。正常即使没有输入也会执行一次命令。
- 该选项是GNU扩展选项
-x, --exit
- 如果构建命令行时使用的字符数超过-s选项指定的参数,就退出执行
例子
参考man xargs