代码改变世界

linux命令之玩转xargs

2015-01-19 13:22  out8  阅读(187)  评论(0编辑  收藏  举报

linux命令之玩转xargs

我们可以用管道将一个命令的标准输出重定向到另一个命令的标准输出,但是有些命令
只能以命令行参数的形式接收数据,而无法接受通过stdin的数据,这个时候我们就要用到xargs。

xargs应该紧跟管道操作符之后。

1.将多行转换为单行,将单行转换为多行。

[root@localhost 桌面]# cat show.txt 

wang

Hunan Chenzhou

123456

li

Guangzhou Zhuhai

654321

[root@localhost 桌面]# cat show.txt | xargs

wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321

[root@localhost 桌面]# cat show.txt | xargs -n 4

wang Hunan Chenzhou 123456

li Guangzhou Zhuhai 654321

2.定界符,使用-d 选项

[root@localhost 桌面]# cat show.txt | xargs -d "\n"

wang Hunan Chenzhou 123456  li Guangzhou Zhuhai 654321 

3.读取stdin,将格式化参数传递给命令(一个或多个)

[root@localhost 桌面]# vi ceshi.sh

#!/bin/bash

echo $*'OK'

[root@localhost 桌面]# chmod +x ceshi.sh 

[root@localhost 桌面]# cat show.txt | xargs -n 1 ./ceshi.sh 

wangOK

HunanOK

ChenzhouOK

123456OK

liOK

GuangzhouOK

ZhuhaiOK

654321OK

[root@localhost 桌面]# cat show.txt | xargs ./ceshi.sh 

wang Hunan Chenzhou 123456 li Guangzhou Zhuhai 654321OK

4.传递复杂的命令参数(可变,不可变参数)-I选项替换字符

[root@localhost 桌面]# cat show.txt | xargs -I {} ./ceshi.sh -p {} -1

-p wang -1OK

-p Hunan Chenzhou -1OK

-p 123456 -1OK

-p li -1OK

-p Guangzhou Zhuhai -1OK

-p 654321 -1OK

5.xargs结合其他命令的用法

[root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs wc -l

8 show.txt

[root@localhost 桌面]$ file * | grep show | cut -d ":" -f1 |xargs -t wc -l

wc -l show.txt 

8 show.txt

-t选项,先打印命令,然后再执行

[root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs vi    打开vi编辑器

[root@localhost 桌面]# file * | grep show | cut -d ":" -f1 | xargs -t -i mv {} {}.bak

mv show.txt show.txt.bak 

修改名字

[root@localhost 桌面]$ find . -name "*.txt" -type f -print0 | xargs -0 tar -zcvf text.tar.gz

查找所有txt文件,并压缩它们。

其实xargs可以接很多命令,发现它们你会觉得非常有趣。