Mailの整理
メールのクライアントはxemacs使いなのでmewなるものを利用している。入社以来6年半ずううっと利用していて、さすがにinboxがぱんぱんになってきた。ディレクトリに必要以上にファイルがあるとのったりのったりするので年ごとにディレクトリをわけることにした。mewは~/Mail/inboxにメールのファイルを置く。ファイル名は数字で1から始まる。毎日数百通ジャンクメールも含めて受け取るので今日現在のファイル名は650000(65万)を越えている。一年10万通のペースと言える。ほとんどその場で消すのだが、それでも日に100通分くらいは削除から逃れられるメールがある。
それをinbox.2000とかinbox.2001とかに振り分けたい。そこで、$ cd ~/Mail/inboxして、
$ time ruby -e '1.upto(10000) {|i| File.rename(i.to_s, "/home/hyoshiok/Mail/inbox.2000/"+i.to_s) if File.exist?(i.to_s)}' real 3m15.381s user 0m0.638s sys 3m14.727s
みたいな感じでやったのだが、時間がかかる。ほとんどsysというのがあれである。ファイルシステムはext3である。
$ time ruby -e '10001.upto(20000) {|i| File.rename(i.to_s, "/home/hyoshiok/Mail/inbox.2000/"+i.to_s) if File.exist?(i.to_s)}' real 9m5.465s user 0m0.728s sys 9m3.552s $ time ruby -e '20001.upto(30000) {|i| File.rename(i.to_s, "/home/hyoshiok/Mail/inbox.2000/"+i.to_s) if File.exist?(i.to_s)}' real 12m57.798s user 0m0.566s sys 12m55.167s
と指数関数的(?)に遅くなる。むむむ。なにか加速する方法はないだろうか?
>教えてRubyの偉い人