检查 md5sum 以识别 perl 中的重复文件

check for md5sum to identify duplicate files in perl

如何在 perl 中的 if 语句中使用 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"
}

通常执行此操作的惯用方法是使用哈希。

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 字符串。将两者联系在一起是 reader.

的一个练习

基本思想是为您遇到的每个文件计算哈希码。在伪代码中:

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