#!/usr/bin/perl # # カレントディレクトリを再帰で辿り、 # ファイルのタイムスタンプが現在時刻より先になってないか調べて、 # リストアップする。 # # usage : perl $0 use strict; use File::Basename; use POSIX 'strftime'; my $dbgfg = 0; # 1/0 = debug on/off my $startdir = '.'; if ( $#ARGV == 0 && -d $ARGV[0] ) { $startdir = $ARGV[0]; } elsif ( $#ARGV >= 0 ) { &usage; } my $nowtimeval = time; my @ngfiles = (); my $tmstr = strftime "%Y/%m/%d %H:%M:%S", localtime($nowtimeval); print "\nNow time = $tmstr\n\n"; &showdir($startdir); print "\n"; print '-' x 10, "\n\n"; if ( $#ngfiles < 0 ) { print "異常なタイムスタンプを持ったファイルは見つかりませんでした。\n"; } else { foreach my $f (sort {$a cmp $b} @ngfiles) { print $f,"\n"; } print "異常なタイムスタンプを持ったファイルが、", $#ngfiles+1, "個、見つかりました。\n"; } &pushanykey; exit(0); sub showdir { my($indir) = @_; opendir(INDIR, $indir) || &error("$indir not open. $!"); my(@files) = readdir(INDIR); closedir(INDIR); foreach my $fn (@files){ next if $fn eq '.'; next if $fn eq '..'; my $path = $indir . "/" . $fn; if ( -d $path ) { print "dir : $path\n"; &showdir($path); } else { if ( -e $path ) { my @sts = stat($path); my $atime = $sts[8]; # access time my $mtime = $sts[9]; # write time if ( $mtime > $nowtimeval ) { my $tmstr = strftime "%Y/%m/%d %H:%M:%S", localtime($mtime); my $str = "NG : $path \t$tmstr"; push(@ngfiles,$str); } if ( $dbgfg ) { my $tmstr = strftime "%Y/%m/%d %H:%M:%S", localtime($mtime); print " file : $path\t$tmstr\n"; } } else { print "not found $path\n"; } } } } sub usage { print "\n\n"; print "usage : perl ", basename($0), "\n\n"; print " カレントディレクトリを再帰で辿り、\n"; print " ファイルのタイムスタンプが現在時刻より先になってないか調べて、\n"; print " リストアップする。\n"; &pushanykey; exit(0); } sub pushanykey { print "\n\n>>> push any key "; my $c = getc; } sub error { my $msg = $_; print "ERROR : $msg\n"; &pushanykey; exit(0); }