大量のファイルを削除するとき
間違って大量のファイルを生成したのでそれの削除に苦心中.
ねぇ,もう,なんというか,うん・・・ごめん,やってもうた.ぼくが悪かった.だから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万強のファイルとディレクトリをぶちこわす!ファデぶ!
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便利
- データ出力先は,必ず専用のパーティションを切っておき,いつでもフォーマットできるようにしておくこと.