0

特定のパスにあるすべてのディレクトリに対して chown を実行するにはどうすればよいですか (perl の mkpath に似ています)。

つまり、/home/parth/something/else を入力として指定すると、このパス上のすべてのディレクトリにその所有者が割り当てられます。組み込み関数はありますか?

4

2 に答える 2

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
于 2011-10-12T06:35:46.430 に答える
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");
}
于 2011-10-12T06:34:55.057 に答える