.svnディレクトリを削除するワンライナー

TortoiseSVN便利なんだけども沢山リポジトリを保有しているとIconOverlaysのStatusCacheが重い。
メモリめっちゃ食うし、たまにファイル削除できなくなるとか悪さもします。
そんなときはSettingsからIconOverlaysのExcludeにディレクトリを指定してあげるといいんだけど、
Excludeにするまでもないリポジトリやもう2度と更新しないリポジトリとか友達からもらったZip解凍したら.svnフォルダも一緒に入ってた時とか.svnディレクトリをがつっと消したほうが早い。

と思ってワンライナーかいてたんだけど、なんかうまく動かなくてぐぐったらいいの見つけた。

for /f "tokens=*" %d in ('"dir /b/s/a | findstr /r \.svn$"') do rmdir /q/s "%d"

* dirコマンドには /aオプションもつける → .svnディレクトリが隠し属性だから。
* .svnディレクトリだけ処理したいので、findstrで「\.svn$」という正規表現で限定してる。もっとうまいやり方あるかな。
* dir → findstrとパイプでうまくつなげるには二重引用符でくくる。上のコマンドをよーく見てみて。
* パスに空白が入る場合に対応して、/fの後にオプション「tokens=*」で1行すべてを1トークンとして認識させる
* 同様に空白対策で、rmdirに渡すときに、%d自体を二重引用符でくくる

コマンドラインで.svnディレクトリを一括削除: dara-j

なるほど、僕がさっきやった時はDirにAをつけてなかったから消えるディレクトリと消えないディレクトリがあったのか。。。。


ちなみにLinuxならこんなかんじ

rm -rf `find ./ -type d -name .svn ! -regex \.svn/. -print` 

or

find ./ -type d -name .svn ! -regex \.svn/. -print|xargs rm -rf

参考
http://dara-j.asablo.jp/blog/2008/08/04/3671839
http://flyfront.blog.shinobi.jp/Entry/6/