Jonathan Altman

Dotcom Thousandaire

January 03, 2006

I like to keep my work email sorted by year to keep the size of the various boxes small for perusal (oh for the day Google sells corporate gmail!). This script is part of a process to accomplish that. It mirrors your existing Thunderbird folder/mailbox structure to a different directory by creating the same directory hierarchy, creating empty mailbox folders, copying your filter rules and popstate files, and skipping the mailbox summary files. This script may be generally useful for other purposes as well.

#!/usr/bin/env ruby require 'find' require 'ftools' scriptname = File.basename(__FILE__) unless ARGV.length == 2 $stderr.puts "Usage: #{scriptname} source_dir dest_dir" exit 1 end from_dir = ARGV[0] to_dir = ARGV[1] sub_start = from_dir.length Find.find(from_dir) {|f| action = "" if (/\.dat$/ =~ f ) action = "copy" elsif (/\.msf$/ !~ f ) File::directory?(f) ? action = "mkdir" : action = "touch" end if (action != "") new_item = to_dir + f[sub_start..-1] $stderr.print "#{action} #{new_item}..." case action when "copy" File::copy f, new_item, true when "mkdir" File::makedirs new_item, true when "touch" File::open(new_item, File::CREAT|File::TRUNC|File::RDWR, File::stat(f).mode) {|file| $stderr.puts "#{new_item} created" } end else puts "skipping #{f}" end }

Once you create this new tree, you can copy the insides of each account's directory into a subfolder that you manually create inside the new tree. As always, this recipe comes with *NO WARRANTY*. _Always back up your data first_. Etc., etc.