#!/usr/bin/perl # dirdupes use strict; use warnings; use File::Find; #*****************Path Variables********************** our $testpath = 'C:\\Temp\\'; #******************************************************* my %dirs; find(\&dir_names, $testpath); my @dup_dirs = grep { $dirs{$_} > 1 } sort keys %dirs; foreach my $list (@dup_dirs) { print "$list\n"; } sub dir_names { return unless -d; return unless /[IPD]\d{8}$/; $dirs{$File::Find::name} = 1; ++$dirs{$File::Find::name}; } #### Output c:\Temp\hddzip>perl dirdupes.pl C:\Temp/Alcohol/P12345678 C:\Temp/hddzip/I12345678 C:\Temp/hddzip/P12345678 C:\Temp/hddzip/P12345679 C:\Temp/hddzip/Test1/P12345678 C:\Temp/hddzip/Test2/P12345678 #### #!/usr/bin/perl # dirdupes use strict; use warnings; use File::Find; #*****************Path Variables********************** our $testpath = 'C:/Temp/'; #******************************************************* my %dirs; find(\&dir_names, $testpath); foreach my $D (sort keys %dirs) { if (@{$dirs{$D}} > 1) { print "\nFound duplicate directories\n"; foreach my $dupes (@{$dirs{$D}}) { print "$D - $dupes\n"; } } } sub dir_names { return unless -d ; return unless /([IPD]\d{8})$/; my $P00 = $_; #or $1 if (not exists($dirs{$P00})) {$dirs{$P00}=[];} push @{$dirs{$P00}},$File::Find::dir; } #### C:\Temp\hddzip>perl dirdupes.pl Found duplicate directories I12345678 - C:/Temp/hddzip I12345678 - C:/Temp/hddzip/Test1 Found duplicate directories P12345678 - C:/Temp/Alcohol P12345678 - C:/Temp/hddzip P12345678 - C:/Temp/hddzip/Test1 P12345678 - C:/Temp/hddzip/Test2 Found duplicate directories P12345679 - C:/Temp/hddzip P12345679 - C:/Temp/hddzip/PDF