任意のディレクトリ以下の.svnディレクトリをまとめて消す

Subversionでバージョン管理をしていると、管理下にあるディレクトリ以下には、サブディレクトリごとに.svnというディレクトリが作成されます。この.svnによってバージョン情報が管理されているっぽいのですが、.svnが邪魔に感じる場面は多いのです。
「あー、.svnマジうぜー。サブディレクトリいっぱいあるのに、いちいち手で消してられっか!」
というアナタにこれ。
たらららったら〜。.svnディレクトリを再帰的に全部消すPHPスクリプト〜。
使い方は簡単。以下のソースコードを.svnディレクトリがある最も上位のディレクトリに保存して、コンソール(あるいはターミナル)でそのディレクトリに移動して

$ php -f スクリプト名.php

とするだけ。ディレクトリの位置関係を図示するとこんな感じ。

+ project <dir>
   + .svn <dir>
      :
      :
   + このスクリプト.php
      :
      :
<?php

rm_svn(dirname(__FILE__));

function rm_svn($path){
	if (substr($path, strlen($path) - 1, 1) == '/'){
		$path = substr($path, 1, strlen($path) - 1);
	}
	
	if (file_exists("$path/.svn") ){
		rm_r("$path/.svn");
		echo "removed : $path/.svn\n";
	}
	
	foreach(scandir($path) as $d){
		if ( preg_match('/^\.+$/', $d) ){
			continue;
		}
		if (is_dir("$path/$d") ){
			rm_svn("$path/$d");
		}
	}
}

function rm_r($path){
	if (substr($path, strlen($path) - 1, 1) == '/'){
		$path = substr($path, 1, strlen($path) - 1);
	}
	if ( !file_exists($path) ){
		return true;
	}
	if ( !is_dir($path) ){
		return unlink($path);
	}else{
		foreach(scandir($path) as $d){
			if (preg_match('/^\.+$/', $d) ){
				continue;
			}elseif(is_dir($path.'/'.$d) ){
				if (!rm_r($path.'/'.$d) ) return false;
			}else{
				if (!unlink($path.'/'.$d) ) return false;
			}
		}
		if (!rmdir($path) ) return false;
	}
	
	return true;
}

?>

これでSubversionの束縛から逃れられるね☆