Эквивалент mkpath для chown [Perl] - PullRequest
       10

Эквивалент mkpath для chown [Perl]

0 голосов
/ 12 октября 2011

Как мне выполнить chown для всех каталогов по заданному пути (аналогично mkpath в perl).

т.е. если я дам / home / parth / что-то / еще и в качестве ввода, у всех каталогов на этом пути будет этот владелец. Есть ли встроенная функция?

Ответы [ 2 ]

4 голосов
/ 12 октября 2011

Для него нет встроенных функций.Однако вы можете использовать основной модуль File::Find для обхода дерева каталогов, getpwnam для получения UID и chown для смены владельца.1010 *

#!/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 голос
/ 12 октября 2011

Используйте 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");
}
...