mkpath 相当于 chown [Perl]

发布于 2024-12-09 15:25:08 字数 128 浏览 1 评论 0原文

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

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

How can I execute chown for all the directories on a given path (similar to mkpath in perl).

i.e. if I give /home/parth/something/else and as input, all of the directories on this path will have that owner.
Is there an inbuilt function ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

还不是爱你 2024-12-16 15:25:08

它没有内置函数。但是,您可以使用核心模块 File::Find遍历目录树, getpwnam 获取 UID,以及 <一个href="http://perldoc.perl.org/functions/chown.html" rel="nofollow">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

There are no built-in functions for it. However, you can use the core module File::Find to traverse directory tree, getpwnam to get UID, and chown to change ownership.

#!/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 [$_]: $!";
}

Usage

chown_path USERNAME PATH
半仙 2024-12-16 15:25:08

使用 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");
}

Use File::Find::Rule to identify the files to change, then use chown on the files found.

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");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文