【发布时间】:2011-04-13 21:21:52
【问题描述】:
我希望$dir 及其下方的所有内容都是只读的。如何使用 Perl 进行设置?
【问题讨论】:
标签: perl permissions file-permissions readonly
我希望$dir 及其下方的所有内容都是只读的。如何使用 Perl 进行设置?
【问题讨论】:
标签: perl permissions file-permissions readonly
您可以结合使用 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);
【讨论】:
未经测试,但它应该可以工作。请注意,您的目录本身必须保持可执行
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。
【讨论】:
chmod -R 通常是最简单的。
system("chmod", "--recursive", "a-w", $dir) == 0
or warn "$0: chmod exited " . ($? >> 8);
【讨论】: