说明

从 STDIN 中读取并按照限定符进行分割成 arguments,并调用 utility 执行命令

产生原因

很多命令不支持’|’作为标准输入或者命令参数过长,必须借助 xargs 命令:

1
2
3
4
# 错误
find /tmp/ -name "*bamboo*" | ls -l
# 正确
find /tmp/ -name "*bamboo*" | xargs ls -l

关于 find 命令, 见find

操作原理

读入 stdin,以空白字符或者换行符作为分界线,切割为 arguments

格式

xargs [OPTIONS] [utility [argument ...]]

参数

1
2
3
4
5
6
7
8
9
10
-a FILE     从FILE中读取输入
-E END 设置EOF字符串

-t 先打印命令,再执行,蛮有用的
-l 每一行最多的argument数目
-i/-I 将参数一行一行复制给{},经常使用到,特别是输入非常多的情况下
-d 指定分隔符,默认xargs分隔符是回车,argument分隔符为空格(见-0),这里是修改xargs分隔符
-0 使`,\,EOF当做普通字符,目前仅仅成功使用过`
-p 每次执行一个argument时,进行询问
-n 每次执行时使用的argument个数

Example

1
2
3
4
5
6
7
8
# 指定定界符,这里必须使用-i才能达到效果哦
echo "xx bb cc dd" |xargs -i -d " " echo {}

#删除指定的进程
ps -ef|grep manage.py|grep -v grep|awk '{print $2}'|xargs kill

# 获取一个源代码目录下所有php文件的行数
find . -type f -name "*.php" -print 0 | xargs -0 wc -l