大量の特定名フォルダを全削除する
会社のあるファイルサーバの管理をしています(していた、が正しいかな)。
毎日バックアップをとる設定になっており、テープにとるのも面倒なのでBackup専用のNAS(ホットスワップRAID)にコピーをとっている。
普段はBackupExecを使うのだけれども、どういう訳かBackupExecからドメインの特定のサーバだけ見つけることが出来ない。古いバージョンでもあるのでほおっておいて別のバックアップソフトを探したところ、別のサーバでBunBackupというソフトを利用していたのでそのまま利用してみた。
なかなかに便利なこのソフト、世代管理という機能もあり、毎日ファイルが更新されていても○○月○○日の状態に戻すことが可能。ということで世代管理機能を使っていたのだが、ある日突然Backup用NASから悲鳴メールがやってきた、「おなかいっぱいです」と。
どうも全ファイル更新と誤認識されたのか世代管理フォルダが山のように出来ている。削除しようにも4万個以上のフォルダのなかにまんべんなく「世代 2008---」というフォルダが散らばっている。これを手動削除する羽目に。
やりたいことはあるドライブにある4万個以上の「世代 2008---」という名前のフォルダを全部削除すること。
少なければWindowsの検索で見つけた物を削除すればいいのだけど数が多すぎて作業性に問題有り。そこでコマンドでやっつけることにする。
ディレクトリの一覧を表示するコマンドはdirだが、最近のdirコマンドは頭が良く/sオプションでサブディレクトリも再帰的に表示できるようになっている。日付やサイズはいらないので/bオプションでファイル名だけ表示、さらにディレクトリ(フォルダ)の一覧だけ欲しいので/a:dオプションをつける
cd /d d:\
dir /s/b/a:d
これでDドライブのすべてのディレクトリ(フォルダ)が表示される。今回は「世代」で始まるフォルダの一覧が欲しいので
dir /s/b/a:d "世代*" >dellist.txt
とすればdellist.txtに「世代」~で始まるフォルダ一覧ができあがり。
次にできあがったリストをバッチファイルにする。
フォルダを消すコマンドのrmdir(もしくはrd)、/sオプションで再帰削除、/qで削除のY/Nを聞いてこなくなるのでこの2つのオプションを使う。
dellist.txtをテキストエディタで開き、各行の先頭に 「rmdir/s/q 」と入れてバッチファイルにすればあとは実行するだけ。各行の先頭に文字ををいれるのはメモ帳ではしんどいので秀丸とか好きなエディタの置換機能を利用するのが吉。
| 固定リンク

コメント
いい情報ありがとうございます!!
投稿: FXER | 2008年7月 8日 (火) 06時26分
最初はLinuxマシンにWindows共有フォルダをsmbmountして1-linerする方が楽だったような気がしましたが、結構Windowsのコマンドプロンプトも役に立ちますね。
投稿: けろろ(管理人) | 2008年7月13日 (日) 01時09分