如何使用终端以递归方式删除所有.svn文件夹?


55

我可以在终端中键入什么命令,以便删除.svn文件夹中的所有文件夹(以及从所有子目录中删除),但不能删除其他任何内容?


也许您可以svn export path/to/repo path/to/export/to代替...
Jonny

需要注意的svn export是,它不会跨不属于svn的文件进行复制。例如,我想为使用Cocoa Pods的iOS应用程序执行此操作,而我们不提交Pods文件夹。然后将其从输出中跳过。我最终使用了类似于Rich的答案的东西。
jackofallcode

Answers:


119
cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • 使用查找,它会递归
  • 在当前目录中。
  • 文件类型是目录
  • 文件名是.svn
  • 打印到此为止匹配的内容(.svn目录)
  • 执行命令rm -rf (thing found from find)。{}是找到的实体的占位符
  • 的; 告诉发现exec的命令已完成。既然壳也有什么想法; 是的,您需要使用\对其进行转义,以便外壳程序对其不执行任何特殊操作,而只是通过查找

2
好的解决方案。虽然find-delete它不会删除非空目录。这种方法比例如开始匹配整个文件路径的一部分要干净。
丹尼尔·贝克

13
我建议您不要-exec rm -rf {} \;第一次运行它,以确保它只是找到您想要的东西。我从来没有遇到过意外删除错误内容的问题,因为我总是先检查一下。
罗布2012年

2
@Rob好点,我通常会做-exec echo rm -rf {} \; 然后删除回声。
Rich Homolka

如果没有太多,另一种选择是用-exec rm -ri {} \;
doovers

4
-exec rm -rf {} +速度可能快很多倍,因为它不必启动太多rm实例。而是在一次调用中打包了最大数量的参数(在这种情况下要删除的目录)。这是可能的,因为rm接受多个参数。
Daniel B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.