リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2004-11-24

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2004-11-24 Wed

* readmail.rb

メールメッセージ読み込みのライブラリ。1.6系列でも使えるのが便利。
ちょっくら古いメールの整理をば…。

#!/usr/local/bin/ruby
require 'mailread'
require 'ftools'
require 'md5'
require 'getopts'

class String
   def shorten(len = 50)
      require 'nkf'
      lines = NKF.nkf( "-e -f#{len}", self.gsub( /\n/, ' ' ) ).split(/\n/)
      lines[0].concat( '..' ) if lines[0] and lines[1]
      lines[0] || ''
   end
end

cache = {}
total = 0

ARGV.each do |dir|
   Dir.new(dir).entries.grep(/^\d+$/).sort{|a,b| a.to_i <=> b.to_i}.each do |f|
      path = dir + "/" + f
      m = Mail.new(path)
      md5 = MD5::new(m.body.join("") + m["subject"].to_s).digest
      if cache[md5] then
         # puts "#{f} == #{cache[md5]}\t(#{m["subject"]})"
         puts "#{cache[md5]}\t#{m["subject"].to_s.shorten}"
         total += File.size(path)
      end
      cache[md5] = path
   end
end
puts "Total: #{total}"

こんな感じのスクリプトで、本文とサブジェクトが同一のメールのうち、
古い方を削除しようと思い、調べてみたけど、以下のような感じで、あま
りディスク節約に貢献しないなあ。

cron で 2674 files, 36875323 bytes 分をキレイにした。

ちなみに、他のディレクトリだと:

200[0123]tmp,inbox で 30 MB 程度
cron,200[0123]tmp,inbox で 7498 files, 68109072 bytes。

とりあえず cron だけ処理した。
あとは、大した節約にならないので、やらない。