Aprendiendo Perl, el reto: Encontrar duplicados
Marcelo
marcelo.magallon en gmail.com
Lun Abr 2 12:45:28 PDT 2012
Tal vez hay que ofrecer algo de material para poder hablar al respecto :-)
Como brian todavía no hay publicado sus comentarios, pongo mi propia
solución que sí es recursiva. Si le pasan el nombre de un directorio
en la línea de comandos va a buscar duplicados en ese directorio y
todo lo que contenga, sino va a buscarlos en el directorio actual.
#!/usr/bin/env perl
use Modern::Perl '2012';
use Digest::MD5;
use File::Find;
sub get_checksum($)
{
open my $fh, "<", $_[0] or return undef;
local $/;
return Digest::MD5::md5_hex(<$fh>);
}
push @ARGV, '.' unless scalar @ARGV;
my %checksum;
find({
wanted => sub {
return if -d $_ || ! -r $_;
return unless defined (my $key = get_checksum($_));
if (exists $checksum{$key})
{
# Ya vimos otro archivo con el mismo checksum
say $checksum{$key}, " ", $_;
}
else
{
$checksum{$key} = $_;
}
},
no_chdir => 1,
},
@ARGV);
Más información sobre la lista de distribución Costarica-pm