不定期日記

J2千葉観戦記, ライブの感想を中心とした備忘録

2009-12-15 (Tue) [長年日記]

_ [ruby][PC] Maildirからmboxに変換するスクリプト

Maildirからmboxにpackするスクリプト書いてみた - 玩具箱 にあるスクリプトを、以下の2点変更してみました。ほとんどそのままです。

  • On memory で処理するのではなく、Tempfileに随時書き出す
  • "." (ピリオド) で始まるファイル名を無視
#!/usr/local/bin/ruby
require 'tempfile'

def main
  maildir = Dir.open(ARGV[0]) rescue usage("can't read directory")
  tempmbox = Tempfile.new('maildir2mbox')
  maildir.each do |file_name|
    next if file_name =~/^\./
    path = maildir.path + '/' + file_name
    next if File.directory?(path)
    file = File.open(path)
    mail, from, wday, day, month, year, time = ['']*7
    file.each do |line|
      if line =~ /^Date:\s+(.+)/
        wday, day, month, year, time = $1.delete(',').split(/\s+/).values_at(0, 1, 2, 3, 4)
        mail += line
      elsif line =~ /^Return-Path:\s+<(.+)>/
        from = $1
      else
        mail += line
      end
    end
    file.close
    tempmbox.puts "From #{from} #{wday} #{month}  #{day} #{time} #{year}"
    tempmbox.print mail
  end
  maildir.close
  tempmbox.close
  begin
    tempmbox.open
    file = File.open(ARGV[1], 'w')
    while line = tempmbox.gets
      file.write(line)
    end
  ensure
    file.close
    tempmbox.close
  end
  puts 'complete!'
end

def usage message
  puts message
  puts 'usage: maildir2mbox maildir mbox'
  exit
end

main

2001|01|07|08|09|10|11|12|
2002|01|02|03|
2003|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|08|09|10|11|12|
2017|03|05|06|09|11|12|
2018|05|08|10|11|
2020|07|