[Hyper Estraier] Hyper Estraierの検索結果を表示するコマンド

環境

この記事の内容は、Hyper Estraier 1.3.6, Ubuntu Linux 6.10で確認しました。

はじめに

手元に370,000件を越える大量のメールがあり、これをgrep以外で効率よく検索する手段はないものか探っていたのですが、Hyper Estraierを試してみることにしました。

データベースは、以下のコマンドで生成します(ホームディレクトリがカレントディレクトリで、Maildir/inboxがメールボックスだとします)。

$ estcmd gather -il ja -fm mail.db Maildir/inbox

検索結果を表示するコマンド

データベースの検索は"estcmd search ..."で行うのですが、これは文章のIDを出力するので、このIDをもとに"estcmd get ..."で対象のメールのパス名を取得し、そのファイルを表示するコマンドを作成しました。

#!/bin/sh

awk="/usr/bin/awk"
cat="/bin/cat"
estcmd="/usr/bin/estcmd"
nkf="/usr/bin/nkf"
xargs="/usr/bin/xargs"

db="${HOME}/mail.db"

${estcmd} search "${db}" "$@" | ${awk} 'BEGIN{
    line = 0;
}
/^--------/{
    line++;
}
/^[0-9]+$/{
    if (line == 2) {
        print $0;
    }
}' | while read id
do
    ${estcmd} get "${db}" ${id} _lreal
done | ${xargs} ${cat} | ${nkf} -w

これを${HOME}/bin/mailに保存したら、

$ mail foo

で、"foo"を含むメールを表示できます。

しばらく、これを使ってみようと思います。

所感

スクリプトは5分くらいで書けました。Unixの単純なコマンド群とawkに感動です。