FrontPage

Mailman 自動投稿対策

フルモデレートなMLで、保留メールが溜まるところは、/usr/local/mailman/data/heldmsg-ML_Name

/usr/local/mailman/data/heldmsg-tfc-9656.pck

1メール1ファイルになってて、こんな・・・

-rw-rw-r--  1 mailman  mailman   3831 Jan 11 08:22 heldmsg-tfc-9662.pck
-rw-rw-r--  1 mailman  mailman  10554 Jan 11 11:17 heldmsg-tfc-9663.pck
-rw-rw-r--  1 mailman  mailman   2634 Jan 11 11:19 heldmsg-tfc-9664.pck
-rw-rw-r--  1 mailman  mailman   2250 Jan 11 11:21 heldmsg-tfc-9665.pck

で、特定の文字列を含むファイルを特定して、取り出して、内容編集した後特定のアドレスへ送信したい。


/usr/local/mailman/data/ ディレクトリの中の特定文字列を含むファイルを特定

http://perl.g.hatena.ne.jp/ishiduca/20090827/1251379550

$ perl -wnl -e '/pattern/ and print $ARGV and close ARGV;' *
$ perl -wnl -e '/tfc/ and print $ARGV and close ARGV;' *

上記のワンライナーで「pattern」を含むテキストファイルをリストアップできる。これをベースにして、patternを含まない場合や、検索するファイルの範囲を絞ったりする事もできるが、結構頻繁に使うので汎用的なスクリプトを書いてみた。

#!/usr/bin/perl -0777 -s -wnl
use strict;

our($a,$un,$h);
our $reg;

BEGIN{
    my $help =<<"HELP";
Usage: $0 -h
       $0 [-a|-un] pattern [file]
           -a  : include directory entries whose names begin with a dot(.)
           -un : not match
           -h  : help
       pattern : use Regular Expression.
          file : use Regular Expression.
HELP
;

    @ARGV or warn "$help\n" and exit 31;
    $reg = shift @ARGV;
    defined $reg and $reg ne '' or warn "$help\n" and exit 27;

    my @Files = $a ? <.* *> : <*>;
    $ARGV[0] and @Files = grep{ /$ARGV[0]/i }@Files;
    @ARGV = grep{ -f and -T }@Files;
    @ARGV or warn "$help\n" and exit 31;
    @ARGV = sort @ARGV;
}

if( $un ){
    /$reg/ism or  print "$ARGV\n" and close ARGV;
} else {
    /$reg/ism and print "$ARGV\n" and close ARGV;
}

END {
    exit 0;
}
$ perl ffpl 牛丼 travel$

とする逆に「牛丼」を含まない場合は

$ perl ffpl -un 牛丼 travel$

引数の指定に正規表現を使っているから表現がスマートじゃないのと、重いのが難点ですね。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS