max a few hundred at the timeとのことなので、4万通以上のメールが誤操作で更に4倍ほどに膨れ上がった今となっては、とても使えない。なので、エクスポートしたmbox形式のメールアーカイブから、重複メールを取り除くフィルタをRubyで書いた。
#!/usr/bin/ruby
require 'digest/md5'
class Msg
def initialize
@str = ''
@id = nil
@eoh = nil
end
def <<(line)
@str << line
unless @id or @eoh
if line =~ /^$/
@eoh = true
elsif line =~ /^Message-ID:\s*(.+)$/i
@id = $1
end
end
end
def id
if @id
@id
else
Digest::MD5.digest(@str)
end
end
def to_s
@str.dup
end
end
ids = {}
msg = nil
while line = gets
if line =~ /^From /
if msg
id = msg.id
unless ids.include?(id)
ids[id] = true
print msg
end
end
msg = Msg.new
end
msg << line if msg
end
print msg if msg and (not ids.include?(msg.id))
これをmbuniqという名前でパスの通ったところに置いて、実行属性を与えてから
% mbuniq <original mbox file(s)> > <new mbox file>
と実行すると、<original mbox file(s)>から重複メールを取り除いた<new mbox file>ができる。これを適当なMUAでインポートすればOK。
メールの同一性はMessage-IDでが同じかどうかで確認している。Message-IDが見つからない場合は、代わりにハッシュ(MD5)値を用いる。当然ながら、大事なメールはバックアップを取ってから使うべし。
Bloggerってファイルを添付できないのかいな?
0 件のコメント:
コメントを投稿