xargs使用学习

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它 擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。 xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

与管道的不同
管道是实现“将前面的标准输出作为后面的标准输入”;
xargs是实现“将标准输入作为命令的参数”。


选项解释
-0 :当sdtin含有特殊字元时候,将其当成一般字符,想/'空格等
-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-p 操作具有可交互性,每次执行comand都交互式提示用户选择,当每次执行一个argument的时候询问一次用户
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符
-i 或者是-I,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。

示例:
1、查找存在的HadoopJob并杀死
hadoop job -list|awk '{print $1}' |xargs hadoop job -kill

2、重命名一组文件
$ ls
1.txt  2.txt  3.txt  log.xml
$ ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak 
mv 2.txt 2.txt.bak 
mv 3.txt 3.txt.bak 
$ ls
1.txt.bak  2.txt.bak  3.txt.bak  log.xml
-i 选项告诉 xargs 用每项的名称替换 {}。

3、管道与xargs不同
echo "--help"|cat
echo "--help"|xargs cat

又如:
在一个目录中有如下三个文件
a.c        b.c            c.c
find   . /   -print命令会打印出三个文件名
find . /    -print | grep a.c  只会打印出a.c这个文件
如果只输入命令grep a.c
那么你在键盘中只输入a.c字符串时,a.c会被打印两次,否则只打印你输入的字符
如果要找三个文件中,那个文件包括有hello字符
find ./ -print | xargs grep hello

4、删除数量比较多的文件
ls | xargs -n 20 rm -fr
ls当然是输出所有的文件名(用空格分割)
xargs就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数
也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了

5、复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images

6、一次下载多个地址
假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接: cat url-list.txt | xargs wget -c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值