xargs命令使用
命令简介
xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。因为以空格作为分隔符,所以有一些文件名或者其他意义的字符串内含有空格的时候,xargs可能会误判。简单来说,xargs的作用是给其他命令传递参数,是构建单行命令的重要组件之一。
之所以要用到xargs,是因为很多命令不支持使用管道|来传递参数,例如:
1 | find /sbin -perm +700 | ls -l # 这个命令是错误,因为标准输入不能作为ls的参数 |
命令格式
1 | xargs [OPTIONS] [COMMAND] |
选项说明
1 | -0, --null |
常用示例
将shell的特殊字符反引号还原为一般字符。
1
2
3root@VM-0-10-ubuntu:~# echo '`0123`4 56780' |xargs -t echo
echo `0123`4 56780
`0123`4 56780设置 xargs 读入参数时的结束标识,以逗号结束。这里要注意结束标志必须要是单独的字段,即以空格或者换行符分隔的字段。
1
2root@VM-0-10-ubuntu:~# echo 01234 , 56789 | xargs -E ","
01234使用 rm、mv 等命令同时操作多个文件时,有时会报 “argument list too long” 参数列表过长的错误,此时可以使用 xargs 来解决。xargs 将标准输入的字符串分隔后,作为参数传递给后面的命令。例如,给当前目录的所有文件添加后缀名。
1
2
3
4ls | xargs -t -i mv {} {}.bak
# 选择符合条件的文件
ls | grep -E "201701|201702|201703" | xargs -I {} mv {} {}.bak设置命令行的最大字符数。参数默认一个一个单独传入命令中执行。
1
2
3
4
5echo "01234 56789" | xargs -t -s 11
echo 01234
01234
echo 56789
56789设置标准输入中每次多少行作为命令的参数,默认是将标准输入中所有行的归并到一行一次性传给命令执行。
1
2
3
4
5echo -e "01234\n56789\n01234" | xargs -t -L 2 echo
echo 01234 56789
01234 56789
echo 01234
01234将文件内容以空格分隔合并为一行输出。
1
2
3
4
5
6
7
8
9# 列出文件内容
cat test.txt
a b c d e
f g h i j
k l m n o
# 多行输入合并为一行输出
cat test.txt | xargs
a b c d e f g h i j k l m n o与ps、grep、awk和kill结合,强制终止指定进程。
1
2ps -ef | grep spp | awk '{printf "%s ",$2}' | xargs kill -9
1ps -ef|grep spp用于查找包含 spp 的进程,awk ‘{printf “%s “,$2,FNR}将目标进程 ID 打印输出,xargs kill -9则将目标进程 ID 作为参数传递给kill -9用于杀死进程。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 188笔记!
