WebDAVサーバディレクトリ内ファイルの整理

Mac MiniにCentOSをインストールし、FAX受信データ保管用のWebDAVサーバを構築、FAXを受信したらメール送信するようにしました。

今回は、FAXデータを保管するWebDAVサーバディレクトリ内のPDFファイルを整理します。

通常Faxの整理

現在通常のFAXは、

fax_YYYYMMDDhhmmss.pdf

のように、「fax_」の後にdatetime値がつきます。

Faxは毎日届きますので、1週間ほど経つとファイル数が増えて目当てのFaxが探しにくくなります。

そこで日付名のディレクトリを作成し、各日付のファイルを振り分けて保存する--という処理を自動で行います。

file2dir.pl
#!/usr/bin/perl

use strict;
use File::Copy;
use File::Path;

our $dir_path = '/home/my_name/www/fax';

main:
{
    my $today = get_date();

    my @files = ();

    if ( opendir( DIR, $dir_path ) ) {
        @files = grep !/^\.\.?$/, readdir( DIR );
        closedir( DIR );
        foreach my $file ( @files ) {
            next if ( -d sprintf( "%s/%s", $dir_path, $file ) );
            if ( $file =~ /_(2[0-9]{7})[0-9]{6}\./ and $file !~ /^[a-z]+_$today/i ) {
                my $dir = $1;
                mkpath( [ sprintf( '%s/%s', $dir_path, $dir ) ], 0, 0755 );
                my $file1 = sprintf( '%s/%s',  $dir_path, $file );
                my $file2 = sprintf( '%s/%s/%s',  $dir_path, $dir, $file );
                copy( $file1, $file2 ) or next;
                unlink $file1;
            }
        }
    }
}

sub get_date
{
    my @date = localtime(time);

    return( sprintf( '%d%02d%02d', $date[5]+1900, $date[4]+1, $date[3] ) );
}

これを、/etc/cron.daily に保存します。
私はいったん /home/my_name/cgi-bin に設置してから/etc/cron.dailyにシンボリックリンクを張りました。


# ln -s /home/my_name/cgi-bin/file2dir.pl /etc/cron.daily/file2dir

約1ヶ月分たまったら、今度はさらに一月分をまとめる予定です。

宣伝Faxの整理

宣伝Faxは /fax/ads ディレクトリに保存されます。
こちらは整理する必要はありませんが、一定期間が経過したら自動的に削除したいです。

adswatch
/usr/sbin/tmpwatch "-umc" 720 /home/my_name/www/fax/ads

このadswatchスクリプトをcron.weeklyに置き、/fax/ads 内の宣伝Faxは30日間(=720時間)アクセスが無ければ自動削除するようにしました。

tmpwatch は /tmp ディレクトリ内の一時ファイルを定期的に削除するのに使われています。


次回はSambaサーバの構築。