Entry tags:
Поиск одинакового
Две недели назад сляпал на коленке скрипт:
#!/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
А вот есть ещё программа fdupes - finds duplicate files in a given set of directories.
fdupes
На работе
no subject
Я пользовал Image Dupeless & Dup Detector, какая-то из них мне даже нравилась :)
no subject
т.е. я бы для скорости сначала нашел файлы с одинаковой длиной, а уж потом сравнивал их MD5.
впрочем, где-то у меня тоже валялся такой скриптик, правда на ruby.