我有一个包含所有文件(C文件)路径的数组。
我正在使用Perl
@array
C:\temp\a.c
C:\temp\b.c
C:\temp\x.c
C:\temp\y.c
C:\temp\z.c
少数文件虽然具有不同的文件名,但可能具有相同的校验和(这意味着它们具有相同的内容)。这些只存在成对。我必须将其中一个的大小设为0。
CODE
use File::Checksum;
my %array;
foreach my $k(@files3)
{
$array{$k} = Checksum($k, 100);
}
# have to check if they have same checksum and make those file to size 0
#making file size to 0 is easy.
#I just have to open file in write mode and then close it.
需要帮助来比较数组中所有文件的校验和,并为具有相同校验和的文件获取文件名
答案 0 :(得分:1)
创建哈希“数组”令人困惑。将其命名为“哈希”不那么容易混淆,但“独特”或“校验和”之类的东西可能会更好。
使用校验和作为密钥,而不是文件名:
my %checksum;
for my $f (@files) {
push @{ $checksum{ Checksum($f, 100) } }, $f;
}
数组的哈希现在包含按校验和分组的所有文件。删除重复项:
for my $ch (keys %checksum) {
my @same = @{ $checksum{$ch} };
if (@same == 2) {
open my $FH, '>', $same[1] or die $!;
} elsif (@same > 2) {
warn "More than 2 files: @same. None deleted.\n";
}
}
(未测试)。