/root
+dir1
+1a
+1b
+dir2
+2a
+2b
+2c
####
/root
##
##
/root/dir1
/root/dir2/2a
/root/dir2/3a
##
##
use File::Find;
my @abs_dirs = qw ( /usr/local/share/locale );
my %abs_dirs;
@abs_dirs{@abs_dirs} = ();
my @OK_dir;
my %all;
find(
sub {
$File::Find::prune = 1, return
if -d and ( exists $abs_dirs{$File::Find::name} );
my $dir = $File::Find::name;
return if -f $dir;
if ( ( grep { $_ =~ m/$dir/ } @abs_dirs ) and ( !exists $all{$dir} ) ) {
$all{$dir};
}
else {
push @OK_dir, $dir;
$File::Find::prune = 1;
return;
}
},
"/usr/local/"
);