xargs

xargs 命令的作用,是将标准输入转为命令行参数

echo "hello word" | xargs echo

上面的代码将管道左侧标准输入,转换为命令参数,传递给第二个echo命令

xargs命令的语法如下:

# xargs [options] command
option[d,t,p]

xargs作用在于大多数命令(比如 rm mkdir ls)与管道一起配合使用,需要xargs将标准输入转为命令行参数

# echo "one two three" | xargs mkdir 等同与  mkdir {one,two,three}

xargs的单独使用

xargs后面的命令默认就是echo

输入xargs按下回车后,命令行会等待用户输入,作为标准输入,你可以输入任意内容,然后按下ctrl+d表示输入结束,这时echo会把输入的内容打印输出

-d参数与分隔符

默认情况下,xargs将换行符和空格作为分隔符号,把标准输入的分割成一个个命令行参数

echo -e "a\nb\nc" | xargs mkdir 等同于 echo -e "d e f" | xargs mkdir

如上两个代码都能实现创建三个目录,

-d参数可以指定其他分割符号,

echo -en "a,b,c,d,e,f" | xargs -d "," mkdir      # echo -n 需要加上否则会多创建出来一个?的目录

-p 打印出要执行的命令,询问用户是否要执行

-t 只打印出要执行的命令,不询问用户是否要执行,直接运行

[root@vm1 chen1.1]# ls
1.txt  a  b  c  d  e  f
[root@vm1 chen1.1]# echo -en "a,b,c,d,e,f" | xargs -d "," -p rmdir
rmdir a b c d e f ?...yes
[root@vm1 chen1.1]# ls
1.txt
[root@vm1 chen1.1]# echo -en "a,b,c,d,e,f" | xargs -d "," -t mkdir
mkdir a b c d e f 
[root@vm1 chen1.1]# ls
1.txt  a  b  c  d  e  f
[root@vm1 chen1.1]# 

-0参数与find的 -print0 搭配使用 解决文件名带空格的问题

由于xargs默认将空格作为分隔符号,所以不太适合处理文件名,因为文件名可能包含空格

find命令有一个特别的参数-print0 将输出的文件列表以null分割,然后xargs 命令使用-0参数表示用null作为分割符号。

find ./ -type d -print0 | xargs  -0 rmdir

上面命令列出./路径下面的所有文件,由于分隔符号是null,所以处理包含空格的文件名,也不会报错

还有一个原因,xargs特别适合find命令,有些命令比如rm一旦参数过多会报错 参数列表过长,而无法执行,改用xargs就没有这个问题,因为他对每个参数执行一次命令

7  -L 参数

如果标准输入包含多行,-L 可以指定多行作为一个命令参数

8 -n参数

指定每次将多项或者多个参数作为一个命令参数

9 -I 参数

每一项命令参数的替代字符串

[root@vm1 chen1]# ls
chen.txt
[root@vm1 chen1]# cat chen.txt 
a
b
c
d
[root@vm1 chen1]# cat chen.txt | xargs -I ff sh -c "echo ff;mkdir ff"    # -F ff(相当占位码) sh -c "命令1;命令2;命令3"
a
b
c
d
[root@vm1 chen1]# ls
a  b  c  chen.txt  d
[root@vm1 chen1]# 

10 --max-procs 参数

xargs默认只用一个进程执行命令,如果命令要执行多次,必须等上一次执行完,才能执行下一次,–max-procs 参数指定同时用多个进程执行命令,–max-procs 0 表示不限制进程数

docker ps -q | xargs -n 1 --max-procs 0 docker kill

上面的命令表示,同时关闭尽可能多的docker容器,这样运行速度会很快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值