#!/usr/bin/perl use File::Path; if (scalar @ARGV <= 0) { print "Usage: perl delete_svn_dirs.pl [baseDir]\r\n... where [baseDir] is the directory under which you want to delete\r\n all .svn directories.\r\n"; } else { my $baseDir = $ARGV[0]; if (-d $baseDir) { print "Deleting SVN dirs for $baseDir" . ":\r\n\r\n"; delSvnDirs($baseDir); } else { die "Error: can't find base directory $baseDir"; } } ##### # Subs ##### sub delSvnDirs { my $dir = shift; my $svnDir = $dir . "/.svn"; if (-d $dir) { # Call this sub for all child directories opendir my $dirHandle, $dir or die "Error: couldn't open a directory handle for directory $dir"; my @dirContents = readdir $dirHandle; closedir $dirHandle or die "Error: couldn't close directory handle for directory $dir"; foreach my $entry(@dirContents) { if ($entry ne '.' and $entry ne '..' and -d "$dir/$entry") { # Found child dir delSvnDirs("$dir/$entry"); } } # Finally, if we find a .svn dir in this directory, delete it if (-d $svnDir) { print "Deleting SVN dir: $svnDir\r\n"; rmtree($svnDir); } } else { die "Error: can't find child directory $dir"; } }