参考书籍:《Linux Shell核心编程指南》——丁明一
参考文章xargs命令详解

一、概述

xargs可以读取标准输入和管道中的数据,用于弥补有些命令(如echo、kill、rm)不能从管道中读取数据的不足。
在这里插入图片描述
使用echo,输出结果为空,因为它不能从管道中读取数据
不指定程序时xargs默认会将数据传递给echo,上面的命令等价于

cut -d: -f1 /etc/passwd | xargs echo

二、选项

-0(数字零)

xargs默认以空格、Tab制表符、回车符为分隔符和结束符,当有的文件本身包含空格时,就会出问题
在这里插入图片描述
xargs会把’hello world.txt’识别为两个文件

针对该问题,find提供了一个print0选项,设置find在输出文件名后自动添加一个NULL来替代换行符,而xargs也可以通过-0选项,指定使用NULL而不是空格、Tab制表符、回车符为分隔符和结束符。

find ./ -name '*.txt' -print0 | xargs -0 rm

-n

指定一次读取几个参数

[root@localhost test]# seq 5 | xargs	#默认调用全部参数
1 2 3 4 5
[root@localhost test]# seq 5 | xargs -n 2	#设置一次调用2个参数
1 2
3 4
5

-I

指定一个替换字符串

[root@localhost test]# touch {a,b,c}.txt
[root@localhost test]# ls *.txt | xargs -I[] cp [] /tmp/	#设置[]为替换字符串,[]的值依次为a.txt、b.txt、c.txt

-i

与-I类似,如果不指定替换符,默认为{}

ls *.txt | xargs -i cp {} /tmp/
ls *.tar |xargs -i docker load -i {}	#逐个导入镜像

-r

no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐