Duplicates.pl
Jump to navigation
Jump to search
Perl script
# duplicates.pl
#
# Dave Saville December 2003
# dave@deezee.org
#
use strict;
use warnings;
use File::Find ();
if ( ! @ARGV )
{
print <<EOF;
Finds duplicate file names across disks
Just give it a list of disks to search
Suggest you point stdout to a file as it can be unexpectably large
eg perl duplicates.pl c d >duplicates.txt
EOF
exit;
}
my %hash;
sub wanted;
while ( my $disk = shift )
{
File::Find::find({wanted => \&wanted}, join '', substr($disk, 0, 1), ":/.");
}
foreach $_ (sort keys %hash)
{
next if @{$hash{$_}} == 1;
print "$_\n";
foreach my $thing (@{$hash{$_}})
{
print "\t$thing\n";
}
}
exit;
sub wanted
{
# build a hash of arrays of file locations keyed
# by lower cased file names
#
tr/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/; # lower case
push @{$hash{$_}}, $File::Find::name;
}