xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令!
xargs 是 execute arguments 的缩写,它的作用是从标准输入中读取内容,并将此内容传递给它要协助的命令,并作为那个命令的参数来执行。
坊间有一种说法,将 xargs 解读为乘号(x)和参数(args)的合体,很形象地表达了 xargs 的作用所在。
# xargs --help
# man xargs
# rpm -qa | grep mariadb | xargs rpm -e --nodeps
# find /usr/lib/systemd/system/ -type f -name "*.service" -print0 | xargs -0 tar -zcvf unitFile.tar.gz
# find /path/to/logDir -maxdepth 1 -type f -name "*.log" -print0 | xargs -0 rm -rf
注:xargs 默认是以空白字符(空格,tab,换行符)来分割记录的,因此文件名 ./file 1.log 被解释成了两个记录./file 和 1.log,不幸的是 rm 找不到这两个文件.为了解决此类问题,聪明的人类想出了一个办法,让 find 在打印出一个文件名之后接着输出一个 null 字符(' ')而不是换行符,然后再告诉 xargs 也用 null 字符来作为记录的分隔符,这就是 find 的-print 和 xargs 的-0 选项。
find -print 和 -print0 的区别: -print 每一个输出后会添加一个回车换行符,而-print0 则不会。
# ls /usr/lib/systemd/system/*.service | head -5 | xargs -I {} basename {}
# ls /usr/lib/systemd/system/*.service | head -5 | xargs -I X basename X
注:用 -I 参数指定marker,一般被指定的marker最好加一个单引号。
# ls /usr/lib/systemd/system/*.service | head -5 | xargs -t -i cp {} /tmp/
注: -t 参数,在执行后面的命令前,先将命令打印出来, 默认使用 -i 指定的 marker就是 {},不过一般推荐使用 -I 指定 marker。
xargs命令
http://man.linuxde.net/xargs
http://www.runoob.com/linux/linux-comm-xargs.html
shell 学习之xargs
http://wiki.jikexueyuan.com/project/shell-learning/xargs.html
Linux基础:xargs命令
https://www.cnblogs.com/chyingp/p/linux-command-xargs.html
Linux xargs命令:一个给其他命令传递参数的过滤器
http://c.biancheng.net/linux/xargs.html
xargs原理剖析及用法详解
http://www.cnblogs.com/f-ck-need-u/p/5925923.html
Linux find运行机制详解
http://www.cnblogs.com/f-ck-need-u/p/6995529.html
xargs - Unix, Linux Command
http://www.tutorialspoint.com/unix_commands/xargs.htm
Linux and Unix xargs command tutorial with examples
https://shapeshed.com/unix-xargs
12 Practical Examples of Linux Xargs Command for Beginners
https://www.tecmint.com/xargs-command-examples
xargs: How To Control and Use Command Line Arguments
https://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility