大量のファイルを削除するとき

間違って大量のファイルを生成したのでそれの削除に苦心中.
ねぇ,もう,なんというか,うん・・・ごめん,やってもうた.ぼくが悪かった.だからctrl+zさせてよ,お願いだよ・・・

  • 生成したファイルの数: 11*1000*7*7*4*4*4 = 34,496,000
  • 生成したディレクトリの数: 1*1000*7*7*4*4*4 = 3,136,000
  • 1つ当たりのファイルサイズ: だーいたい150B

4台の計算機のデータを一手に引き受けた結果がコレだよ.4日かかったからといって消すのも4日なんてことはないよね.いろいろしんどい.
計算機ごとに4つのディレクトリに別れてるから,1つあたり90万強のファイルとディレクトリをぶちこわす!ファデぶ!

1.エクスプローラから

エクスプローラから応答なし
なにがインデックス化だよww表示どころかプロパティも走らんじゃねぇかww次.

2.コマンドラインから

2-1. $>del *

→1時間ぐらい?待機して終了する.
なぜだ,なぜ削除しない?なにがいやだったでござるか.

2-2. $>echo * |xargs rm

rmいれてなかった.他になんか探してみる<
(追記)いれてみたところ残り19万ファイルぐらいで終わったことになる,なぜだ

3.プログラムから

逆引きRuby - ディレクトリにおいてあったのを適用する.神よ,ここにおられたか.

# 削除するディレクト
DELETEDIR = "/home/take/tmp/test/"

# サブディレクトリを階層が深い順にソートした配列を作成
dirlist = Dir::glob(DELETEDIR + "**/").sort {
|a,b| b.split('/').size <=> a.split('/').size
}

# サブディレクトリ配下の全ファイルを削除後、サブディレクトリを削除
dirlist.each {|d|
Dir::foreach(d) {|f|
File::delete(d+f) if ! (/\.+$/ =~ f)
}
Dir::rmdir(d)
}

#>ruby rm.rb
→1時間ぐらいメモリがずんずん上がって1%切ったので終了.全部Arrayに入れたのがだめだったのですか?神よ・・・

4.削除ソフトから

4-1.FastCopy

windows最速コピーソフト.削除もできる.バッファ増やしても有意に速度があがらんのでせっかくだし512MBにして実行.
→FileRate = 133.83 files/s 遅くない?なんなの?そしてどんどん遅くなるのはなんで?そのうちに100 files/sで安定してまうじゃん.何事?複数走らせても合計が150前後で漸近.まてまて,全部おわるのに100時間超ってなんだよwバカかよwwバカはおれだよwww

4-2.Fast Folder Eraser

公式では290秒で12万弱のファイルを消せるとのこと.メガンテ期待.→よくわからんけど今も走ってる.FastCopyと違ってCPU全部持ってかれる.100%キープ.
→3時間半で213万のファイルを削除できる.進捗も推定終了時間もないけど,確実に仕事してる.

学んだこと

  • ファイルは安易に出力しない.
  • FastFolderEraser便利
  • データ出力先は,必ず専用のパーティションを切っておき,いつでもフォーマットできるようにしておくこと.