mkpath等效于chown [Perl]

时间:2011-10-12 05:19:30

标签: perl chown

如何为给定路径上的所有目录执行chown(类似于perl中的mkpath)。

即。如果我给/ home / parth / something / else并作为输入,此路径上的所有目录都将拥有该所有者。 有内置功能吗?

2 个答案:

答案 0 :(得分:4)

没有内置功能。但是,您可以使用核心模块File::Find遍历目录树,getpwnam获取UID,chown更改所有权。

#!/usr/bin/env perl

use strict;
use warnings;

use File::Find;

sub usage {
    die "Usage: $0 USERNAME PATH\n";
}

my $username = shift or die usage;
my $uid = ( getpwnam $username )[2] or die "Non-existent user.\n";

my $path = shift or die usage;
if ( !-e $path ) {
    die "Non-existent path.\n";
}

find( \&traverse, $path );

sub traverse {
    chown $uid, -1, $_ or die "Failed to chown [$_]: $!";
}

用法

chown_path USERNAME PATH

答案 1 :(得分:1)

使用File::Find::Rule标识要更改的文件,然后对找到的文件使用chown

use File::File::Rule qw( );

my $uid = getpwnam('...') or die;
my $gid = getgrnam('...') or die;

for my $qfn (File::Find::Rule->in('/home/parth/something/else')) {
   chown($uid, $gid, $qfn)
      or warn("chown $qfn: $!\n");
}