xargs 命令

xargs的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题,其作用一般等同于shell中反引号,但更加灵活,并可以正确处理输入中的空格等特殊字符的情况。

命令的一般形式:xargs [option...] [command [initial-arguments]]

选项

  • -a inputfile--arg-file=inputfile,从inputfile读取名字而不是标准输入。如果使用了这个选项,标准输入流在命令执行时将保持不变,否则stdin从重定向自/dev/null

  • -0--null,(-0是数字0)输入文件名将以null字符而不是空白符结束,任何引号和反斜杠将不被特殊处理(每个字符取字面义)。Disables the end of file string, which is treated like any other argument.

  • -d delim--delimiter delim,输入文件名以指定的字符而不是空白符结束,任何引号和反斜杠将不被特殊处理(每个字符取字面义)。Disables the end of file string, which is treated like any other argument。一般是单个字符,不支持多字节字符。

  • -I replace-str-i[replace-str]--replace[=replace-str],用stdin读取的名字替换初始参数中出现的replace-strreplace-str默认是{}

  • -r--no-run-if-empty,如果标准输入是空的,不执行命令。默认情况下,命令至少执行一次,即使没有输入。

  • -t--verbose,在stderr上输出命令,在命令执行前。

  • -p,在命令执行前让用户确认是否执行。

  • -P max-procs--max-procs=max-procs,任意时刻,同时执行命令的最大进程数。默认是1。如果是0,xargs将同时运行尽可能多的进程。

  • L max-lines-l[max-lines]--max-lines[=max-lines],每个命令行最多处理max-lines个非空白输入行。

  • -n max-args--max-args=max-args,每个命令行最多使用max-args个参数。

  • -s max-chars--max-chars=max-chars,每个命令行最多使用max-chars个字符,包括命令、初始化参数和参数字符串的结束符。

  • -x--exit,如果超出了-s选项指定的大小将退出。

  • --process-slot-var=environment-variable-name

举例

find . -name "struts*.xml" | xargs -t grep "struts-2.0.dtd",在当前目录下查找文件名开头是struts的xml文件,然后再找到的xml文件里搜索struts-2.0.dtd字符串,在搜索之前先在stderr上输出每次执行的grep完整命令。

find faultReport -name "strut*.xml" | xargs -t -i grep "struts-2.3.dtd" {},在当前目录下查找文件名开头是struts的xml文件,然后再找到的xml文件里搜索struts-2.0.dtd字符串,每次在搜索之前用find命令找到的文件名替换grep命令中的{},然后在stderr上输出执行的grep完整命令。

find . -iname "*.log" | xargs rm -f,在当前目录下不区分大小写查找后缀是log的文件,然后删除。

find . -iname "*.jpg" -type f -print | xargs tar -czf images.tar.gz,查找所有jpg文件并压缩。

find . -iname "*.jpg" | xargs -n1 -i cp {} ./backup/,查找所有jpg文件并拷贝到当前目录的backup目录下。-n1选项的作用是每次只拷贝一个文件。

ls | xargs -r -i cp {} {}.bak,可以替换多次。

file * | grep ASCII | cut -d: -f1 | xargs -p vi,把当前目录下的文本文件名传递给xargs,xargs把这些文件名作为vi的参数,在执行vi命令前让用户确认是否执行。

参考

http://www.gnu.org/software/findutils/manual/html_node/find_html/Invoking-xargs.html


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据