Поиск одинакового
Aug. 6th, 2006 01:36 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Две недели назад сляпал на коленке скрипт:
#!/usr/bin/perl -w
use strict;
use File::Find;
use Digest::file qw(digest_file_hex);
# Переменные
my %hash; # Хеш списков файлов
print STDERR "Scanning...\n";
# Рекурсивно ищем файлы
find(\&wanted, '.');
print STDERR "\r", ' 'x78, "\rfinished", "\n";
# Выводим результат
print "Same files:\n";
foreach (keys %hash) {
my @list = @{$hash{$_}};
print '=' x 50, "\n", join("\n", @list), "\n" if $#list > 0;
} # foreach
#############################
# И в каждом из них выполняем
sub wanted {
if (-f) {
push(@{$hash{digest_file_hex($_, "MD5")}}, $File::Find::name);
print STDERR "\r", ' 'x78, "\r", $File::Find::name;
} # if
} # sub
Ищет одинаковые (по содержимому) файлы в текущем каталоге и рекурсивно вглубь, после чего выводит список найденных в STDOUT. Дёшево и сердито. [Не]совпадение имён и размеров файлов роли не играет.
no subject
Date: 2006-08-06 04:42 pm (UTC)А вот есть ещё программа fdupes - finds duplicate files in a given set of directories.
fdupes
Date: 2006-08-07 04:36 am (UTC)На работе
Date: 2007-04-04 05:04 am (UTC)no subject
Date: 2006-08-07 10:27 am (UTC)Я пользовал Image Dupeless & Dup Detector, какая-то из них мне даже нравилась :)
no subject
Date: 2006-08-17 08:53 am (UTC)т.е. я бы для скорости сначала нашел файлы с одинаковой длиной, а уж потом сравнивал их MD5.
впрочем, где-то у меня тоже валялся такой скриптик, правда на ruby.