カテゴリ

mailman

mailman の過去ログ(保存書庫)を部分的に、例えば1年以前のものは、削除するという場合の方法が、相当面倒と思っていたのですが、それなりに簡単にやれる方法を見つけました。

[前提知識]
こちらの記事をご覧ください→ 過去ログ(保存書庫)の削除。


[使うコマンド]
csplit
cat

[用意するファイル]
(mailmanディレクトリ)/archives/(publicまたはprivate)/listname.mbox/listname.mbox
:以下「listname.mbox」
※ listname はML名

[本題]
「過去ログ(保存書庫)の削除。」の通り、部分的に過去ログを削除するためにはmbox形式のファイルから該当部分のメールのみを削除する必要があり、複数になると相当面倒(だと思っていたの)ですが、下記の手順で割と手軽になりそうと思いました。

目次

手順1.mbox形式のファイルを1メールずつに分割

mbox形式は、

  • 1つのメールは「From 」 から始まる
  • メールの区切り目は1行以上の空白行

という形式になっています。

csplit コマンドを利用することで、「From 」を区切りに使い、1メール1ファイルに分割できます。

csplit -f "prefix_" -b "%04d" listname.mbox '/^From .*/' '{*}'

上記により、 prefix_(4桁の連番) というファイル名に分割されます。
この際、元のファイルはそのままです。
特に空白行を削除などの処理は含まれていませんので、各ファイルの1行目が From ではじまり、最後に数行の空白行がある状態です。
こんな感じ。

From xxxx@kaz.bz Sun Dec 30 15:56:44 2007
Return-Path: <xxxx@kaz.bz>
(以下メールヘッダ部分)

(以下本文)

(本文ここまで)

 
 
 

手順2.削除したいメールに該当するファイルを削除

手順1.でできた複数のファイルから、削除したいメールを探し、削除します。

手順3.mbox形式のファイルに再結合

下記のようにしてmbox形式に戻します。

cat prefix_* > new_listname.mbox

手順4.過去ログファイルの上書き・再生成

手順3.でできたファイルnew_listname.mboxで
(mailmanディレクトリ)/archives/(publicまたはprivate)/listname.mbox/listname.mbox
を上書きします。
ファイル名は listname.mbox である必要が(多分)あります。

(mailmanディレクトリ)/archives/(publicまたはprivate)/listname/
以下のファイルを全削除します。

この状態で、新規投稿がある、または (mailmanディレクトリ)/bin/arch コマンドを利用して過去ログを再生成することで、部分的に削除された過去ログが作成できます。
(たぶん。)

コメント

いただいたコメント
  1. [Blog:技術系メモ] に新規投稿しました。  http://go.kaz.bz/50

  2. Nan より:

    “技術系メモ 過去ログ(保存書庫)の部分削除。” http://t.co/nBb4nnp5