How to use Terminal to delete all .svn folders recursively?

56

34

What command can I type into the Terminal so that I can delete all .svn folders within a folder (and from all subdirectories) but not delete anything else?

Mikey

Posted 2012-02-09T16:33:39.267

Reputation: 1 560

Maybe you could just svn export path/to/repo path/to/export/to instead... – Jonny – 2015-07-24T04:09:08.037

A note on svn export is that is doesn't copy across files that are not part of svn. For example, I wanted to do this for an iOS application that uses Cocoa Pods where we do not commit the Pods folder. This was then skipped from the output. I ended up using something similar to Rich's answer for what I wanted. – jackofallcode – 2016-06-21T13:29:38.563

Answers

121

cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • Use find, which does recursion
  • in the current directory .
  • filetype is directory
  • filename is .svn
  • print what matched up to this point (the .svn dirs)
  • exec the command rm -rf (thing found from find). the {} is a placeholder for the entity found
  • the ; tells find that the command for exec is done. Since the shell also has an idea of what ; is, you need to escape it with \ so that the shell doesn't do anything special with it, and just passes to find

Rich Homolka

Posted 2012-02-09T16:33:39.267

Reputation: 27 121

Another option if there are not too many would be to confirm deletion of each file with -exec rm -ri {} \; – doovers – 2015-01-14T01:44:34.333

4-exec rm -rf {} + is probably many times as fast, because it doesn’t have to launch too many rm instances. Instead, it packs the maximum amount of arguments (directories to remove in this case) in one call. This is possible because rm accepts multiple arguments. – Daniel B – 2015-02-17T18:33:58.147

2Good solution. While find has -delete it won't delete non-empty directories. This approach is cleaner than e.g. starting to match parts of the whole path of files. – Daniel Beck – 2012-02-09T17:02:04.730

13I'd recommend running it without the -exec rm -rf {} \; the first time to make sure it's only finding what you want it to. I've never had an issue where I've accidentally deleting the wrong thing with it, because I always check first. – Rob – 2012-02-09T18:09:23.777

2@Rob good point, i usually do -exec echo rm -rf {} ; then remove the echo. – Rich Homolka – 2012-02-09T18:29:38.630