我花了最近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,对我来说非常有用
答案 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";
}