当我运行这个程序时:
#!/usr/bin/perl -w
use File::Find;
use File::stat;
use Time::gmtime;
use Fcntl ':mode';
my %size = ();
my @directory = ('.');
find(
sub {
my $st = stat($File::Find::name) or die "stat failed for $File::Find::name : $!";
if ( defined $st )
{
my $gm = gmtime $st->mtime;
$size{$gm->year + 1900} += $st->blksize unless S_ISDIR($st->mode);
}
else
{
print "stat failed for ", $File::Find::name, ": $!\n";
}
},
@directory);
foreach my $year (keys %size)
{
print "$year ", $size{$year}, "\n";
}
我明白了stat failed for ./1128/00 : No such file or directory at ./size.pl line 13.
。但是,当我列出它时,它就在那里:
# ls ./1128/00
03 05 07 09 12 14 18 20 22 24 27 29 32 34 37 40 43 45 47 50 52 54 57 59 63 65 67 69 75 78 81 83 85 88 90 92 95
04 06 08 11 13 15 19 21 23 25 28 31 33 35 39 41 44 46 48 51 53 55 58 61 64 66 68 71 77 79 82 84 86 89 91 93
根据我为这个问题删除的诊断,我可以看到它确实成功地统计了前 4 个文件以及.
目录和1128
目录(父目录1128/00
)。它总是成功地统计相同的文件和目录并在1128/00
. 为什么会失败?