关于使用perl获取目录中的md5文件

时间:2014-04-16 21:59:13

标签: perl directory md5

我花了最近3天试图弄清楚为什么我不能在目录中显示单个文件。我可以获得任何单个文件的md5,但如果它在目录中则不能。

此脚本将列出文件,但不会列出目录中任何文件的md5。

这是我正在使用的代码:

use strict;
use warnings;
use Digest::MD5 qw(md5_hex);

my $dirname = "./directory_name";
opendir( DIR, $dirname );
my @files = readdir(DIR);
closedir(DIR);

print "@files\n";

foreach my $file (@files) {
    if ( -d $file || !-r $file ) { next; }
    open( my $FILE, $file );
    print Digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
}
system ( 'pause' )

它是一个简单的脚本,可以获取目录中每个文件的md5,对我来说非常有用

1 个答案:

答案 0 :(得分:1)

始终检查open的错误状态$!或在脚本顶部添加use autodie。您正在调用open,但假设它有效。由于您缺少文件的路径信息,因此可能无法找到它们,并且-r检查都会跳过它们。

获取路径信息的一个解决方案是仅使用文件glob而不是readdir

use strict;
use warnings;
use autodie;

use Digest::MD5;

my $dirname = "./directory_name";

foreach my $file (<$dirname/*>) {
    next if -d $file;
    open( my $FILE, '<:raw', $file );
    print Digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
}

此外,请务必open :rawbinmode中的{{1}}文件,否则他们可能会返回错误的值。