なにを探しているときに見つけたかすでに忘れたのだが、しばらく前にこんなTIPSを見つけた。
タイトルにあるとおり、
dir /b/s somedirってやると、UNIX/Linuxのfindコマンドよろしく、指定ディレクトリ以下のファイルをフルパスで列挙してくれる。
例えば、dara-jの手持ちの環境ではZend Framework 1.0.0を D:\PHP\libs\Zend 以下に設置しているのだが、こんな感じで列挙できる。
C:\Documents and Settings\dara-j>dir /b/s D:\PHP\libs\Zend\*.php D:\PHP\libs\Zend\Acl.php D:\PHP\libs\Zend\Auth.php D:\PHP\libs\Zend\Cache.php D:\PHP\libs\Zend\Config.php D:\PHP\libs\Zend\Date.php D:\PHP\libs\Zend\Db.php D:\PHP\libs\Zend\Debug.php : (中略) : D:\PHP\libs\Zend\XmlRpc\Value\DateTime.php D:\PHP\libs\Zend\XmlRpc\Value\Double.php D:\PHP\libs\Zend\XmlRpc\Value\Exception.php D:\PHP\libs\Zend\XmlRpc\Value\Integer.php D:\PHP\libs\Zend\XmlRpc\Value\Scalar.php D:\PHP\libs\Zend\XmlRpc\Value\String.php D:\PHP\libs\Zend\XmlRpc\Value\Struct.php C:\Documents and Settings\dara-j>はぁ、こんなことできたんだぁ。
dir /?でそれぞれのオプションがどんな意味があるのか見てみたところ、
/B ファイル名のみを表示します (見出しや要約が付きません)。なるほど、/bで属性などをつけずファイル名(というより、絶対パスみたいなのだが)のみ、/sで再帰処理なことはよくわかった。しかし、何度かこの説明文は見たことあるんだけど、さっぱり気がつかなかった。
これだけでも割と目から鱗チックだったんだけど、リンク先にはさらにこんなコマンドが載っていた。
リダイレクトしない場合はforコマンドが使えます。
C:\Inetpub\wwwroot> for /f %d in ('dir /b/s _vti_cnf') do rmdir /q/s %d
うーん、よくわからんが、どうやらIISがらみの特定のディレクトリかファイルを再帰処理で一括削除しているみたい。
つか、FORコマンド??
for /?で見てみると(長いヘルプなのでテキストファイルに書き込むと吉)、どうやらこれが該当するのかな。
FOR /F ["オプション"] %変数 IN ('コマンド') DO コマンド [コマンド パラメータ]なるほどねぇ、dir /b/s でファイルのフルパスがあがってくるので、これをforコマンドにまわせばループ処理できるんだ。
んで、やっとこ本題。
Subversionの作業コピーって、各ディレクトリにメタデータディレクトリ「.svn」が隠しディレクトリとして追加されてるのよね。
ローカルで作業してるときはいいんだけど、これをどっかに配布したりするのに、このメタデータが邪魔なので削除してみようかと。いや、当然エクスポートすればいいのは知ってるんだけどね。
いきなり結論。
for /f "tokens=*" %d in ('"dir /b/s/a | findstr /r \.svn$"') do rmdir /q/s "%d"
ここにいたるまで若干の紆余曲折はあったんだけど、要点は以下。
セコメントをする