$sourcedir = "/mnt/dev/"; # adapt this $targetdir = "/mnt/test/"; # adapt this use File::Find; find( \&check, $sourcedir ); sub check { my( $name ); $name = File::Find::dir . "/" . $_; &checkpermissions( $name ); }; sub checkpermissions { my( $directory ) = @_; my ( $targetdir = $directory ) =~ s!^$sourcedir!$targetdir!; my ($perm_s, $perm_t); my @statresults; # This could be more optimized, but ... @statresults = stat( $directory ); $perm_s = @statresults[2]; @statresults = stat( $targetdir ); $perm_t = @statresults[2]; if ($perm_s != $perm_t ) { print "$targetdir has wrong permissions."; chmod $perm_s, $targetdir or die "Couldn't update the permissions for $targetdir : $!\n"; }; };