xargs 命令是给其他命令传递参数的过滤器,也是组合多个命令的工具,它擅长将标准输入数据转换成命令行参数。xargs 能够处理管道或 stdin 输入并将其转换为特定命令或脚本的参数。当你发现有的命令不接受管道时,务必第一时间想到 xargs 命令!
1、语法:
xargs [选项] [COMMAND]
2、常用选项说明:
-a FILE:来自于文件(默认 stdin)
-0/--null:特殊字符(., \, NULL 等)还原为一般字符,确保正确识别有空格或换行符的输入
-e 'STR':指定结束条件
-p:执行前打印命令且需要确认后执行
-n NUM:每次传递的参数数量
-d 'CHAR':自定义分割符(默认空格)
-I 'CHAR':可以指定其他替换字符
-i:使用 {} 作为替换符(等同于 -I {})
-t:执行命令前打印命令
3、COMMAND说明:
* 可以是命令也可以是脚本;
* 默认命令为 echo;
* 不支持 alias 命令。
4、常用使用方法举例:
1)读取 test.txt 并显示(使用默认的 echo 命令)
xargs -a test.txt
2)传递参数给脚本:
echo sda1 | xargs /root/rename.sh
3)查找符合条件的文件,并使用 ls 列出(不能使用 alias 命令 ll):
find /sbin -perm +7000 | xargs ls -l
find /sbin -perm +7000 | xargs -i ls -l {} # {} 为替换符
find /sbin -perm +7000 | xargs -I @ -t ls -l @ # 通过 -I @ 指定替换符为 @(出现两次);-t:输出结果前输出命令
4)指定数量与结束符的参数传递:
cut -d ':' -f1 /etc/passwd | xargs -p -n 5 -e 'lp' finger # 每次五个;到 finger 即结束
5)带有特殊字符的文件名查找:
find /home -name "*.txt" -print0 | xargs -0 rm # find -print0 与 xargs -0 配合使用
5、注意事项:
* 将标准输入转换为命令行参数
* 用于不支持管道符的命令(ls, id, finger ...)
* 如果命令后面可以跟内容且没有目的路径时,可以省略-i或-I