我正在尝试从工作目录中删除所有.svn目录.
我以为我会像这样使用find和rm:
find . -iname .svn -exec 'rm -rf {}' \;
但结果是:
find:rm -rf ./src/.svn:没有这样的文件或目录
显然该文件存在,或者找不到它...我错过了什么?
你不应该把rm -rf {}
单引号.
正如你所引用的那样,shell将它的所有参数-exec
视为命令而不是命令加参数,所以它正在寻找一个被调用"rm -rf ./src/.svn"
但未找到它的文件.
尝试:
find . -iname .svn -exec rm -rf {} \;
再见,你应该放弃使用-exec一次性完成多个文件的习惯.例如,我会根据习惯写出来
find . -iname .svn -print | xargs rm -rf
或者,因为我现在使用的是Macintosh,更有可能遇到带有空格的文件或目录名称
find . -iname .svn -print0 | xargs -0 rm -rf
"xargs"确保每个"N"文件只调用一次"rm",其中"N"通常为20.在这种情况下,这不是一个巨大的胜利,因为rm很小,但如果你想要执行的程序每个文件都很大或者在启动时进行了大量处理,它可以使事情变得更快.