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

时间:2015-03-19 17:29:09

标签: perl md5sum

如何在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"
}

2 个答案:

答案 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字符串。把两者连在一起对读者来说是一个练习。