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 コマンドを利用して過去ログを再生成することで、部分的に削除された過去ログが作成できます。
(たぶん。)
[Blog:技術系メモ] に新規投稿しました。 http://go.kaz.bz/50
“技術系メモ 過去ログ(保存書庫)の部分削除。” http://t.co/nBb4nnp5