如何使用Perl递归设置只读权限?

时间:2010-09-17 19:20:28

标签: perl permissions file-permissions readonly

我希望$dir及其下面的所有内容都是只读的。如何使用Perl设置它?

3 个答案:

答案 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。