PSLブログ

ヨシナシゴトヲツヅリマス

File::Findでfindコマンド相当のことをCGIでやる

sshで入れないサーバで、一定期間以内に更新されているファイルリストが欲しかったので作った。

#!/usr/bin/perl

use strict;
use File::Find;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/plain\n\n";
my $time = time;
my $elapsed_days = 40;

find(\&func, "/target_directory");
sub func {
    my $mtime = (stat($File::Find::name))[9];
    if ($time - $mtime <= $elapsed_days * 86400) {
        printf("%s (%s)\n", $File::Find::name, get_datetime($mtime));
    }
}

sub get_datetime {

    my($time) = @_;
    my($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($time);
    sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year+1900, ++$mon, $mday,
     $hour, $min, $sec);

}

出力のタイムスタンプはおまけ。 findコマンドと比べたらとても重いと思うが目的は達せた。TMTOWTDI:-)