xargs主要功能是build and execute command lines from standard input,当命令行过长时,报Too many arguments错误时,可以使用xargs,其主要作用是从stdout中每次取一部分,然后传递给命令行执行,直至取完为止.
语法:
xargs
[-0prtx] [--interactive] [--null] [-d|--delimiter=delim]
[-E eof-str] [-e[eof-str]] [--eof[=eof-str]]
[-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]
[-I replace-str] [-i[replace-str]] [--replace[=replace-str]]
[-n max-args] [--max-args=max-args]
[-s max-chars] [--max-chars=max-chars]
[-P max-procs] [--max-procs=max-procs] [--show-limits]
[--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]
[--version] [--help] [command [initial-arguments]]
选项:
-e[EOFString]/ -E EOFString
将 EOFString 参数用作逻辑 EOF 字符串。如果不指定 -e 或 -E 标志,则采用下划线
_
为逻辑 EOF 字符串。xargs 命令读取标准输入直到达到 EOF 或指定的字符串。
-i[ReplaceString]/ -I ReplaceStrin
该选项用于设置在Command 参数中用什么字符表示标准输入的当前行。ReplaceStrings 不能在超过 5 个自变量中使用。在每个标准输入行开始的空字符被忽略。每个 Argument能包含一个或多个 ReplaceStrings,但不能大于 255 字节。如果没有指定 ReplaceString 参数,使用字符串 "{}"。注:-I(大写 i)和 -i 标志是互相排斥的;最后指定的标志生效。
示例1:
ls | xargs -t -i mv
{}
{}
.
bak
示例2:
ls | xargs -t -I [] echo
{}
.er
-l[Number]/ -L Number
用于指定。从标准输入的
哪一个非空行
开始读取字符串到数Command 命令。默认值为1.
-n Number
用于指定xargs每次最多传递标准输入的多少行内容到Command命令。默认值为1.
-p
询问是否运行 Command 参数。它显示构造的命令行,后跟一个 ?...(问号和省略号)提示。输入肯定的、特定于语言环境的响应以运行 Command 参数。任何其它响应都会引起 xargs 命令跳过那个特定的参数调用。每个调用都将询问您。
[-P max-procs] [--max-procs=max-procs] [--show-limits]
这个什么意思呢?难道表示最大的进程数?
-t
启用跟踪方式,这样就可以看到实际构造的Command命令及参数
实例1
find . -name "*.java" |
xargs
grep 'AsyncTask'
实例2
find -name ‘.svn’ |
xargs
rm -rf
实例3
ls | xargs
-n 20
rm -fr
ls当然是输出所有的文件名(用空格分割)
xargs
就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数
也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了
当然我可以直接使用
rm -rf *
实现这个功能