メールボックス用アーカイブ・ツール、archmbox

 メールの保管・保存の作業では、mboxにあるメールを一覧したりコピーしたりする必要がある。 archmbox はそのためのツールで、特定の日付以前のメールを別の(圧縮されている)mboxに移したり、メールヘッダーの条件を正規表現で指定してメールを抽出したり削除したりすることができる。

 今回の試用では64ビットFedora 9を使った。archmboxはUbuntu Intrepid用のパッケージはあるがFedora 9やopenSUSE 11用のものはないのでバージョン4.10.0をソースからビルドしたのだが、その際小さな障害に遭遇した。fuserのバイナリは/sbinにインストールされているのだが、このディレクトリーは、通常、root以外のユーザーのPATHには含まれていない。そのため、./configureコマンドがfuserを起動できず止まってしまうのだ。これは、下に示すようにPATHを修正してから./configureを実行すれば回避できる。

$ tar xzvf /.../archmbox-4.10.0.tar.gz
$ cd ./archmbox*/
$ export PATH=$PATH:/sbin
$ type -all fuser
fuser is /sbin/fuser
$ ./configure
$ make
$ sudo make install

 archmboxには、基本的に、表示、コピー、移動、削除という4つのモードがある。表示はmboxにあるメールを一覧するモードで、そのほかはメールをアーカイブしたり削除したりするモードだ。出力mboxを圧縮することもできる。--compressオプションを付けるとgzipで、--bzip2オプションを付けるとbzip2で圧縮する。

 操作対象となる入力mboxは、archmboxを起動するコマンドラインの末尾に指定する。1つまたは複数のmboxを指定できるが、-R/--recursiveオプションを付けディレクトリー名を指定すると、サブディレクトリーも含めそのディレクトリー以下にあるすべてのmboxが対象になる。一方、出力mboxは-n/--archive-nameオプションで指定する。何も指定しないと、入力mboxの名前に.archivedを付けたものになる。また、出力mboxを書き出すディレクトリーは-p/--archive-pathオプションで指定する。

 テスト用のmboxには、XFSファイルシステムに関するメーリングリストのアーカイブを用いた。現行のmboxではなくアーカイブを用いたのは、以下で示す操作例を再現できるようにするためだ。このアーカイブは月毎に分割されており、「年-月」(年月は数字で表記)という形式の名前が付いている。具体的には、記事執筆時点(11月末)で「最新の」mboxである2008-10を用いた。その一部を下に示す。

 開始時日付は-d/--dateまたは-o/--offsetで指定する。-dオプションはyyyy-mm-ddという形式で、-oオプションは今日を起点に遡る日数で日付を指定する。-o -1は、日付に関する条件がないことを意味する。

 mboxのパスは必ず絶対パスで指定する。下に示した例で、最初のコマンドはmboxを相対パスで指定しすべてのメールをリストしようとしているが、エラーになっている。このような場合は、2番目のコマンドのようにして、絶対パスで指定する。

$ archmbox --list -o -1 ./2008-10
./2008-10: use full path!
$ archmbox --list -o -1 `pwd`/2008-10

ID     FROM                       SUBJECT
--------------------------------------------------------------------------------
1      WinMax Video <info@varied  Media Marketing The New Age of Growth!
2      Christoph Hellwig <hch@ls  Re: [PATCH 2/3] Remove restricted_chown pa
...

 日付指定が1つしかないのは、少々不便だ。特定の期間のメールを抽出したいときは、期間の終了日以前のメールを抽出した上で、期間の開始日以前のメールを削除する必要がある。すぐ後で説明する--regexpオプションを使うこともできるが、この場合は開始と終了の日付ではなく期間内のすべての日付を表す正規表現を作る必要がある。

 --copyモードは、複数のmboxに含まれる全部または一部のメールを1つのmboxに集めたいときに便利だ。下に、3つのXFS月次ファイルのメールを集めて2008-8-to-10.archivedを作るコマンドを示す。

$ archmbox --copy \
   -o -1 \
   -n 2008-8-to-10 \
   `pwd`/2008-10 `pwd`/2008-09 `pwd`/2008-08

 -y/--copyモードと-a/--archiveモードの場合、抽出したメールは出力mboxに追加される。このため、下に示した例では最初に出力mboxファイルを削除して、予期せぬメールが紛れ込まないようにしている。テストした日は11月26日、試用したmboxは10月のメールだけを含む。したがって、--offsetで25を指定した最初のコマンドでは、入力mboxに含まれるすべてのメールがコピーされることになる。その次のコマンドは--offsetで27を指定しており、10月の最後の数日が除外されるため、コピーされたメールの数は少なくなっている。3番目のコマンドで指定されている、-r/--reverseオプションは指定された日付を最終日ではなく開始日として扱うべきことを指示し、その日付以降のメールがコピーされる。

$ date
Wed Nov 26 16:14:04 EST 2008

$ rm -f 2008-10.archived;
$ archmbox --copy --totals  --verbose 2 --offset 25  `pwd`/2008-10
Overall summary
==================================================
Parsed messages:                               818
Total used space (MB):                        7.41
Copied messages:                               818
Total saved space (MB):                       7.41
...

$ rm -f 2008-10.archived;
$ archmbox --copy --totals  --verbose 2 --offset 27  `pwd`/2008-10
...
Parsed messages:                               818
Total used space (MB):                        7.41
Copied messages:                               775
Total saved space (MB):                       7.15

$ rm -f 2008-10.archived;
$ archmbox --copy --totals  --verbose 2 --offset 27 --reverse   `pwd`/2008-10
...
Copied messages:                                43

 -a/--archiveオプションは、コピーされたメールが入力mboxから削除される点を除き、--copyオプションと同じだ。メールを削除するときは-k/--killを使う。--archiveのように入力mboxのメールを削除するが、コピーはしない。

 mboxの古いメールをアーカイブするときは、--keep-flaggedオプションと--keep-unreadオプションを付けるとよい。こうすれば、フラグの付いたメールや未読のメールはアーカイブされずに残される。

 メールヘッダーを正規表現で検索してメールを絞り込むオプションは2つあり、どちらも複数個指定できる。このオプションを使うと、複数のヘッダーに条件を付けてメールを簡単に絞り込むことができる。-x/--regexpが複数ある場合はいずれかの条件を満たすメールが、-X/--Regexpオプションが複数ある場合はすべての条件を満たすメールが抽出される。正規表現をすべて小文字で記述すると大文字小文字を区別せず、大文字が1つでもあると区別する。

 条件は「ヘッダー(大文字小文字を区別する)=正規表現」の形で指定する。下の最初のコマンドはSubjectに「filesystem corruption」を含むものを、2番目のコマンドはSubjectが「filesystem corruption」を含み、かつ、Fromが「Christoph Hellwig」を含むものだけを抽出する。2番目のコマンドで-xオプションを使った場合は、いずれかの条件を満たすものが抽出される(全部で199メール)。

$ archmbox --list --totals --offset -1 -x Subject='filesystem corruption'  `pwd`/2008-10

ID     FROM                       SUBJECT
--------------------------------------------------------------------------------
12     Dave Chinner <david@fromo  Re: XFS filesystem corruption on the arm(e
13     Eric Sandeen <sandeen@san  Re: XFS filesystem corruption on the arm(e
14     Eric Sandeen <sandeen@san  Re: XFS filesystem corruption on the arm(e
...

$ archmbox --list --totals --offset -1 -X Subject='filesystem corruption' -X From='Christoph Hellwig'  `pwd`/2008-10

ID     FROM                       SUBJECT
--------------------------------------------------------------------------------
361    Christoph Hellwig <hch@in  Re: XFS filesystem corruption on the arm(e
370    Christoph Hellwig <hch@in  Re: XFS filesystem corruption on the arm(e
...

Mailbox '/home/ben/testing/archmbox/2008-10': 818 messages (7.41 MB)
For archive:                                    2 messages (0.01 MB)
...

 archmboxを使うと、簡単な操作でmboxから既読メールを抽出してアーカイブしたり圧縮したりできる。アーカイブのためのツールではあるが、mboxを調べたり、1つまたは複数のmboxにあるメールを日付や正規表現によって抽出したりする際にも使える。

Ben Martin 10年以上にわたってファイルシステムに携わっている。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。

Linux.com 原文(2008年12月8日)