Cебе для этого написал такой скрипт:
Fdups.pl
#!/usr/bin/perl
use strict;
use File::Find;
use Digest::file qw(digest_file_hex);
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
my $kb = 1024;
my $mb = 1048576;
my $gb = 1073741824;
my $dir = '.';
-d $dir or die "Ошибка: Директория \"$dir\" не найдена.";
my (%sf, %s);
sub bytes_scale {
my $b = $_[0] + 0;
my ($r, $n);
if ($b >= $gb) { $r = $b / $gb; $n = 'G' }
elsif ($b >= $mb) { $r = $b / $mb; $n = 'M' }
elsif ($b >= $kb) { $r = $b / $kb; $n = 'K' }
else { $r = $b; $n = 'B' }
sprintf '%.3g%s', $r, $n;
}
sub a {
$sf{$_[1]}{$_[0]} = '';
$s{$_[1]}++;
}
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ && (int(((-s _) + 511) / 512) > 0)
&& \&a ($name, -s _);
}
print "Поиск и чтение размеров файлов...\n";
File::Find::find({wanted => \&wanted}, $dir);
my (%hf, %h);
print "Вычисление хэш сумм для файлов с одинаковым размером и обработка данных...\n";
for my $size (keys %s) {
next unless ($s{$size} > 1);
for my $file (keys %{$sf{$size}}) {
my $hash = digest_file_hex($file, 'MD5');
$hf{$size}{$hash}{$file} = '';
$h{$size}{$hash}++;
}
}
my ($dups_exst, $grp, $f_cnt, $all_f_cnt, $all_summ_size);
print "Вывод данных...\n";
for my $size (keys %h) {
for my $hash (keys %{$hf{$size}}) {
next unless ($h{$size}{$hash} > 1);
$dups_exst = 1;
$grp++;
$f_cnt = 0;
print "Группа: $grp\n";
for my $file (keys %{$hf{$size}{$hash}}) {
$f_cnt++;
print " $f_cnt) $file\n";
}
$f_cnt -= 1;
my $grp_size = $size * $f_cnt;
$all_f_cnt += $f_cnt;
$all_summ_size += $grp_size;
print " ", &bytes_scale($size), " x $f_cnt = ", &bytes_scale($grp_size), "\n\n";
}
}
print "Дубликатов не найдено.\n" and exit unless ($dups_exst);
print "=====================================
Всего:
Групп дубликатов: $grp
Дубликатов в группах
(не считая первого оригинального файла в каждой группе):
$all_f_cnt файлов, объемом ", &bytes_scale($all_summ_size), ".\n=====================================\n";
положил его в ~/bin (создать если нет), сделал
chmod +x ~/bin/Fdups.pl
и потом для поиска дубликатов находясь в нужной папке, вызываю:
Fdups.pl