我希望$dir
及其下面的所有内容都是只读的。如何使用Perl设置它?
答案 0 :(得分:10)
您可以使用File::Find和chmod的组合来执行此操作(请参阅perldoc -f chmod):
use File::Find;
sub wanted
{
my $perm = -d $File::Find::name ? 0555 : 0444;
chmod $perm, $File::Find::name;
}
find(\&wanted, $dir);
答案 1 :(得分:2)
system("chmod", "--recursive", "a-w", $dir) == 0
or warn "$0: chmod exited " . ($? >> 8);
答案 2 :(得分:1)
未经测试但它应该有效。请注意,您的目录本身必须保持可执行状态
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执行shell命令:
system("find $dir -type f | xargs chmod 444");
system("find $dir -type d | xargs chmod 555");
如果您有很多条目,我会使用xargs。