如何在if语句中使用perl中的md5sum检查重复文件?
我正在寻找一行代码:
if { (md5 of new file matches any of the md5sum values of already parsed files)
print "duplicate found"
} else { new file and add md5sum to a list for check)
print "new file"
}
答案 0 :(得分:1)
基本思想是为您遇到的每个文件计算哈希码。在伪代码中:
my %md5_to_file;
for every file
push @{ $md5_to_file{ md5 of file } }, file
然后,基数为%md5_to_file
的基线中的任何值> 1点可能重复。然后,您可以进行进一步检查,以确定是否有碰撞或真正重复。
另见DFW Perl Mongers ONLINE Hackathon Smackdown - Results, Awards, And Code 。
答案 1 :(得分:0)
通常,执行此操作的惯用方法是使用哈希。
use strict;
use warnings;
use 5.018;
my %seen;
for my $string (qw/ one two three four one five six four seven two one /) {
if ( $seen{$string} ) {
say "saw $string";
}
else {
$seen{$string}++;
say "new $string";
}
}
How is the hash used to find unique items详细介绍。
如评论中所述,您可以使用像Digest::MD5这样的库来为文件生成MD5字符串。把两者连在一起对读者来说是一个练习。