首页 > 其他 > 详细

xargs和exec详解

时间:2016-03-19 06:37:12      阅读:194      评论:0      收藏:0      [点我收藏+]

xargs:

 

xargs擅长将标准输入数据转换成命令行参数,xargs能处理stdin并将其转换为特定的命令行参数,也可以将单行或者多行的文本输入转换成其他格式。

xargs的作用就是将管道符前面输入的内容作为xargs后面命令的输入,它的好处是可以将多步才能完成的任务合并成一步。(常与find搭配使用)

 

命令格式:command |xargs command

例:

find  /var/log -mtime +10 |xargs rm-f

 

实际应用:

1.将多行输入转换成单行输出:

[root@one ~]# cat 11111.txt 
a b c d
e f g
h i
g
 
[root@one ~]# cat 11111.txt |xargs
a b c d e f g h i g


 

2.单行输入转换成多行输入:xargs -n

默认输出以空格为定界符。-n指定每行输入的最多参数。

[root@one ~]# cat 222.txt
q w e r t
a s d f g
z x c v b
[root@one ~]# cat 222.txt|xargs -n 2
q w
e r
t a
s d
f g
z x
c v
b


3.指定定界符:xargs  -d

[root@one ~]# echo "appleAappleAappleA"|xargs -d A
apple apple apple


 

4.读取输入信息,将格式化参数传递给命令。

例:将脚本需要的参数写入test.txt文件中下,通过xargs传递给脚本test.sh

cat test.txt |xargs -n 1 ./test.sh


 

5.结合find使用xargs

findxargs搭配使用,可以让工作变得更加轻松。

例:

find . -type f -name "*.txt" -print0 |xargs rm -f


很多文件中都可能包含有空格符(  ),所以find命令输出的结果的定界符不确实是(/n)还是空格,所以搭配xargs删除某指定类型文件时候,应该使用print0find搭配,以字符“\0”为分隔符。

[root@one ~]# find . -type f -name "*.txt" -print
./test.txt
./shell/1212.txt
./1.txt
./222.txt
[root@one ~]# find . -type f -name "*.txt" -print0
./test.txt./shell/1212.txt./1.txt./222.txt


 

6.批量修改文件后缀名:

 

[root@one 111]# touch 1.txt 2.txt 3.txt
[root@one 111]# ls
1.txt  1.txt.gz  2.txt  3.txt
[root@one 111]# rm -f 1.txt.gz 
[root@one 111]# ls
1.txt  2.txt  3.txt
[root@one 111]# ls *.txt|xargs -n 1 -i{} mv {} {}_bak
[root@one 111]# ls
1.txt_bak  2.txt_bak  3.txt_bak


xargs -n1 -i{}类似于for循环,-n 1每一行输出一个对象,-i{}用意是吧前面的对象用{}来代替。

mv {} {}_bak相当于mv 1.txt 1.txt_bak

 

exec:

xargs相似的命令exec

find-exec搭配一样的很强大。

例:

查找当前木创建时间大于10天的文件并删除:

find . -mtime +10 -exec rm -rf {} \;

//此命令是把{}作为前面find查找出来的文件的代替符,后面的\是;的脱意符,不然shell会把分号作为是该行命令的结尾,就只能把find找出的第一个文件删除,其他文件依然存在。

把某用户的全部文件所有权限更改成另一个用户。

find . -type f -user root -exec chown user1 {} \;

 

-exec如何结合多个命令:

exec的缺陷是只能接受单个命令,想直接执行多个命令怎么办呢?

我们可以把多个命令写在一个脚本当中去,然后让-exec去执行这个脚本。

 

-exec ./commands.sh {} \;

 


xargs和exec详解

原文:http://1024079574.blog.51cto.com/10921986/1752672

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!