Не проверено, но оно должно работать.Обратите внимание, что ваши каталоги должны оставаться исполняемыми
set_perms($dir);
sub set_perms {
my $dir = shift;
opendir(my $dh, $dir) or die $!;
while( (my $entry = readdir($dh) ) != undef ) {
next if $entry =~ /^\.\.?$/;
if( -d "$dir/$entry" ) {
set_perms("$dir/$entry");
chmod(0555, "$dir/$entry");
}
else {
chmod(0444, "$dir/$entry");
}
}
closedir($dh);
}
Конечно, вы также можете выполнить команду оболочки из Perl:
system("find $dir -type f | xargs chmod 444");
system("find $dir -type d | xargs chmod 555");
Я использую xargs, если у вас много записей.