发新话题
打印

[shell脚本] find命令的exec选项

find命令的exec选项

在用find命令查找到我们需要的目标以后,我们经常要继续对找到的目标文件进行处理,exec选项就为我们提供了这样的方便。
删除当前目录(包括子目录)下的所有.o文件

复制内容到剪贴板
代码:
find "$PWD" -type f -name '*.o' -exec rm {} \;

"find"找到的.o文件将会逐个将名字将替换到{}的位置,"\"是保证";"被正确转义

把当前目录(包括子目录)下所有的.h文件移动到上一级的include目录中

复制内容到剪贴板
代码:
find "$PWD" -type f -name '*.h' -exec mv {} ../include/ \;

自己怎么应用,慢慢琢磨吧。
--------------------------------------------------
埋头调着程序,不知不觉,黄瓜已经爬上了架子

TOP

find "$PWD" -type f -name '*.o' | rm -rf;
也可以达到同样效果
Once upon a man.

TOP

建议楼上最好把rm -rf 改为rm -f ,
养成这样的习惯, 我后悔了好多次!
peaceful

TOP

引用:
原帖由 Flyinmorning 于 2008-5-9 13:33 发表
find "$PWD" -type f -name '*.o' | rm -rf;
也可以达到同样效果
在.o文件数量不是很大的情况下的确效果相同,但如果.o的数量非常大的话,超过rm的参数长度就不能运行了。反正在我工作的工程目录下是不行的。管道是把前面的结果一起送到后面做参数,而exec是一个一个的送过去。
--------------------------------------------------
埋头调着程序,不知不觉,黄瓜已经爬上了架子

TOP

善用xargs
[root@monitoring openssh-4.7p1]# pwd
/usr/local/src/openssh-4.7p1

time find "$PWD" -type f -name '*.h' -exec ls {} \;
real    0m0.102s
user    0m0.028s
sys     0m0.080s

time find "$PWD" -type f -name "*.h" |xargs ls

real    0m0.006s
user    0m0.002s
sys     0m0.005s

利用xargs 效率高
积极!努力!低调!百折不挠!
分享才能进步!帮助他人就是在帮助自己! 共同学习探讨Linux!
  Linux= howto+man ! ^_^

TOP

引用:
原帖由 NetSeek 于 2008-5-10 08:34 发表
利用xargs 效率高
xargs也解决了了参数过长的问题,透过管道调用,效率反而提高不少。赞一个!
--------------------------------------------------
埋头调着程序,不知不觉,黄瓜已经爬上了架子

TOP

xargs 不错。
通常我用 xargs 和 find 配合的时候都是用
复制内容到剪贴板
代码:
find ... -print0 | xargs -0 -r ....
避免文件名里面有空格造成麻烦。
BTW,这是 man page 里面的推荐用法。
bash$ :(){ :|:;};:&

TOP

引用:
原帖由 NetSeek 于 2008-5-10 08:34 发表
善用xargs
[root@monitoring openssh-4.7p1]# pwd
/usr/local/src/openssh-4.7p1

time find "$PWD" -type f -name '*.h' -exec ls {} \;
real    0m0.102s
user    0m0.028s
sys     0m0.080s

time find  ...
我建议 find "$PWD" 写成 find . 就可以了。这样比较简洁。
bash$ :(){ :|:;};:&

TOP

受益了
Once upon a man.

TOP

很受用, 很喜欢

TOP

顶个!嘿嘿!

TOP

恩. . .. 这样的确可以. . .
而且还很简便。 .  . . ..
支持. . . ..

TOP

举个例子,作为对6楼的说明
假设目录下有a b c 三个文件,a中内容是b c
执行:
tux@tux-desktop:~/lzp$ cat a  | xargs --verbose --max-args=1 ls -l
ls -l b
-rw-r--r-- 1 tux tux 0 2008-07-05 10:57 b
ls -l c
-rw-r--r-- 1 tux tux 0 2008-07-05 10:57 c

TOP

明白一点了,呵呵

TOP

find . -type f -name "*.php" | xargs grep -i "my String"

TOP

发新话题