Linux的find和xargs命令

本文介绍了如何使用xargs命令处理find命令的输出结果,包括解决特殊字符引起的问题、将文件列表作为参数传递给其他命令等技巧。
 

如果需要把一条命令在标准输出上的输出结果,转换为另一个程序或或者另一个命令的参数,可以用xargs命令。 
# man xargs 
可以看到例子: 

1、 find /tmp -name core -type f -print | xargs /bin/rm -f 
用find命令在tmp目录下查找以core命名的文件,然后删除它们。需要注意的是如果文件名字包含新行或者空格的话,这条命令将会被错误操作。 
   
2、find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f 
    这条命令就正确地处理了新行和空格,有可能带来的错误。 
    这条命令和上一条意思一样。 
   
3、cut -d: -f1 < /etc/passwd | sort | xargs echo 
     大概列举了系统的用户。 

4、find ./ -type f -print | xargs -i mv -f {} ./newdir 
     -i 表示 find 传递给xargs的结果 由{}来代替
注意:cshell和tcshell中,需要将{}用单引号、双引号或反斜杠,否则不认识。bash可以不用。建议加上。

例如

find ./ -type f -print | xargs -t -i mv -f "{ }" ./newdir 打印显示

find ./ -type f -print | xargs -p -i mv -f "{ }" ./newdir   询问是否执行?

find ./ -type f -print | xargs -t -p -i mv -f "{ }" ./newdir 打印显示,并询问是否执行?

   管道是把一个命令的输出传递给另一个命令作为输入,比如:
command1 | command2
    但是command2仅仅把输出的内容作为输入参数。
    find . -name "install.log" -print打印出的是install.log这个字符串,如果仅仅使用管道,那么command2能够使用的仅仅是install.log这个字符串, 不能把它当作文件来进行处理。当然这个command2除了xargs。xargs就是为了能够对find搜索到的文件进行操作而编写的。它能把管道传来 的字符串当作文件交给其后的命令执行。
举个例子:
(1)$find . -name "install.log" -print | cat
./install.log   #显示从管道传来的内容,仅仅作为字符串来处理
(2)$find . -name "install.log" -print | xargs cat
aaaaaa        #将管道传来的内容作为文件,交给cat执行。也就是说,该命令执行的是如果存在install.log,那么就打印出这个文件的内容。

   通过这个例子,应该很容易理解这样有什么不同了。当你要对匹配文件操作时,使用find and xargs。其实这都是运用了管道。xargs是shell命令的一个,可以把管道输入的内容转化为其参数要操作的文件。

文章出处:DIY部落(http://www.diybl.com/course/3_program/shell/shelljs/20090923/176675.html)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值