当前位置:  开发笔记 > 开发工具 > 正文

为什么我的'find'不能像我期望的那样使用-exec?

如何解决《为什么我的'find'不能像我期望的那样使用-exec?》经验,为你挑选了2个好方法。

我正在尝试从工作目录中删除所有.svn目录.

我以为我会像这样使用find和rm:

find . -iname .svn -exec 'rm -rf {}' \;

但结果是:

find:rm -rf ./src/.svn:没有这样的文件或目录

显然该文件存在,或者找不到它...我错过了什么?



1> Dave Webb..:

你不应该把rm -rf {}单引号.

正如你所引用的那样,shell将它的所有参数-exec视为命令而不是命令加参数,所以它正在寻找一个被调用"rm -rf ./src/.svn"但未找到它的文件.

尝试:

find . -iname .svn -exec rm -rf {} \;



2> Paul Tomblin..:

再见,你应该放弃使用-exec一次性完成多个文件的习惯.例如,我会根据习惯写出来

find . -iname .svn -print | xargs rm -rf

或者,因为我现在使用的是Macintosh,更有可能遇到带有空格的文件或目录名称

find . -iname .svn -print0 | xargs -0 rm -rf 

"xargs"确保每个"N"文件只调用一次"rm",其中"N"通常为20.在这种情况下,这不是一个巨大的胜利,因为rm很小,但如果你想要执行的程序每个文件都很大或者在启动时进行了大量处理,它可以使事情变得更快.


另外,您可以在find的-exec子句后以“ \ +”而不是“ \;”结尾,这等效于使用-print0并将管道传递给xargs。
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有