1、描述
# 作用: 能够处理stdin并将其转换为特定命令的命令行参数
# 语法: command | xargs
2、参数
参数 | 描述 |
-n num | 执行一行中显示的字段数,默认以空白和换行符分割每个参数 |
-d IFS | 自定义定界符来分割参数 |
-a file | 从文件中读入数据作为sdtin |
-e flag、-E flag | flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止 |
-I {} | 指定了替换字符串 |
-P num | 一次运行的最大进程数(一般建议和cpu核实一致) |
3、技巧
1、只要我们把"find"的输出作为"xargs"的输入,就必须将"-print0"与"find"结合使用,以字符"null('\0')"来分隔输出
比如: 用find匹配并列出所有的".txt"文件,然后用xargs将这些文件删除: find . -type f -name "*.txt" -print0 | xargs -0 rm -f这样就可以删除所有的".txt"文件;xargs -0将\0作为输入定界符
2、查询结果为空时处理方式 建议使用 -I 或 -i
[root@ /cdly/tmp]# ll /tmp/
总用量 0
[root@ /cdly/tmp]# ls /tmp/*.log 2>/dev/null|xargs ls
file
[root@ /cdly/tmp]# ls
file
[root@ /cdly/tmp]# ls /tmp/*.log 2>/dev/null|xargs -i ls {}
[root@ /cdly/tmp]#
[root@ /cdly/tmp]# >/tmp/a.log
[root@ /cdly/tmp]#
[root@ /cdly/tmp]# ls /tmp/*.log 2>/dev/null|xargs ls
/tmp/a.log
[root@ /cdly/tmp]# ls /tmp/*.log 2>/dev/null|xargs -i ls {}
/tmp/a.log
4、实例
[root@ /cdly]# cat file标签:tmp,xargs,cdly,cat,ls,root From: https://blog.51cto.com/cdly/5946934
1 2 3
4 5 6 7
8 9 10
# -n num
# 在一行中显示
[root@ /cdly]# cat file |xargs # 输出:1 2 3 4 5 6 7 8 9 10
# 一行中显示三个字段
[root@ /cdly/tmp]# cat file |xargs -n 3
1 2 3
4 5 6
7 8 9
10
# -d IFS 以字符X进行分割字符
[root@ /cdly/tmp]# echo "splitXsplitXsplitXsplit" | xargs -d X # 输出:split split split split
[root@ /cdly/tmp]# xargs -a file echo # 输出:1 2 3 4 5 6 7 8 9 10
[root@ /cdly/tmp]# xargs -E '6' -a file echo # 输出:1 2 3 4 5
[root@ /cdly/tmp]# cat file | xargs -E '6' # 输出:1 2 3 4 5
[root@ /cdly/tmp]# cat a.txt
aa
bb
cc
[root@ /cdly/tmp]# cat a.sh
#!/bin/bash
echo $* '#'
[root@ /cdly/tmp]# cat a.txt | xargs -I {} sh a.sh -p {} -l
-p aa -l #
-p bb -l #
-p cc -l #
# -P num 指定并发的进程数量
[root@ /cdly/tmp]# time seq 5|xargs -n1 -P5 sleep
real 0m15.028s
user 0m0.000s
sys 0m0.003s
[root@ /cdly/tmp]# time seq 5|xargs -n1 -P5 sleep
real 0m5.004s
user 0m0.000s
sys 0m0.005s