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

Mik*_*key 58 svn terminal.app macos

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

Ric*_*lka 124

cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
  • 使用 find,它进行递归
  • 在当前目录中。
  • 文件类型是目录
  • 文件名是 .svn
  • 打印到目前为止匹配的内容(.svn 目录)
  • 执行命令rm -rf (thing found from find)。{} 是找到的实体的占位符
  • 这 ; 告诉 find exec 的命令已完成。由于 shell 也有什么想法;是,你需要用 \ 转义它,这样外壳就不会对它做任何特别的事情,只是传递给 find

  • 我建议第一次在没有 `-exec rm -rf {} \;` 的情况下运行它,以确保它只找到你想要的。我从来没有遇到过不小心删除错误内容的问题,因为我总是先检查。 (13认同)
  • `-exec rm -rf {} +` 可能快很多倍,因为它不必启动太多的 `rm` 实例。相反,它在一次调用中打包了最大数量的参数(在这种情况下要删除的目录)。这是可能的,因为 `rm` 接受多个参数。 (4认同)
  • 很好的解决方案。虽然 `find` 有 `-delete` 它不会删除非空目录。这种方法比例如开始匹配整个文件路径的部分更干净。 (2认同)
  • @Rob 好点,我通常做 -exec echo rm -rf {} \; 然后去除回声。 (2认同)