use File::Find; find(sub { my ($mode) = (stat)[2] & 0777; # see perldoc -f stat my $new_mode = 0664; if ( -d _ or ($mode | 0111) ) { $new_mode |= 0111; } if ($new_mode != $mode) { chmod($new_mode, $_) or warn("Failed to set permissions on " ."$File::Find::name; $!"); } }, "dir");