我有一个数组,其中包含所有文件(C文件)的路径。
我正在使用Perl
@大批
C:\temp\a.c
C:\temp\b.c
C:\temp\x.c
C:\temp\y.c
C:\temp\z.c
尽管文件名不同,但很少文件可能具有相同的校验和(这意味着它们具有相同的内容)。这些仅成对存在。我必须将其中之一的大小设为0。
代码
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.
在如何比较数组中所有文件的校验和并获取具有相同校验和的文件的文件名方面需要帮助
创建哈希“数组”令人困惑。将其命名为“哈希”不太容易混淆,但是像“唯一”或“校验和”之类的名称可能会更好。
使用校验和作为密钥,而不是文件名:
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";
}
}
(未经测试。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句