dir中的文件权限

时间:2011-03-07 15:50:39

标签: perl

如何找到tree所拥有的文件和tree拥有的群组?如何找到tree所拥有文件的整个目录?

3 个答案:

答案 0 :(得分:3)

File::Find模块是标准的Perl模块(即,它可以在所有Perl安装中使用)。您可以使用File :: Find来浏览目录树并搜索所需的文件。

要使用,您需要创建一个解析文件的wanted子例程,然后让find子例程在其调用中包含wanted例程。 File::Find模块有点klutzy,因为它最初只用于find2perl命令。

这是一些完全未经测试的代码。请注意,您可以使用全局变量和包变量等令人讨厌的东西。这是我不喜欢File::Find的原因之一。

use File::Find;
our $myUid = getpwnam('tree');
our $muGid = getgrnam('tree');
find (\&wanted, @dirList);

sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($File::Find::name);
    next if (not -f $File::Find::name);
    next if ($uid != $myUid);
    next if ($gid != $myGid);
    print qq(File "$File::Find::name" is owned by group 'tree' and user 'tree'\n);
}

我编写了自己的File::Find File::OFind,因为它更面向对象。你可以从here获得。理解起来要容易一些。 (再次,完全未经测试):

use File::OFind;
# Really should test if these return something
my $myUid = getpwnam('tree');
my $muGid = getgrnam('tree');

# Create your directory search object
my $find = File::OFind->new(STAT => 1, $directory);

# Now keep looping and examining each file
while($find->Next) {
   next if ($find->Uid != $myUid);
   next if ($find->Gid != $myGid);
   next if ($find->Type ne "f");   #Is this a file?
   print $find->Name . " is owned by group and user tree\n";
}

答案 1 :(得分:0)

完成此任务所需的内置Perl函数包括getpwnamgetgrnamstat

 ($name,$passwd,$uid,$gid,
   $quota,$comment,$gcos,$dir,$shell,$expire) = getpwnam 'tree';

将返回有关用户tree的大量有用信息。对于此任务,您将对$uid字段特别感兴趣。同样地,

($name,$passwd,$gid,$members) = getgrnam 'tree';

检索有关组tree的数据。您将对$gid字段最感兴趣。最后,stat函数

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
   $atime,$mtime,$ctime,$blksize,$blocks)
       = stat($filename);

返回一个包含有关文件(或目录)的系统信息的13元素数组。对于您的任务,您正在查找文件,以便从stat($filename)返回的用户和​​组ID与从getpwnamgetgrnam返回的用户和​​组ID匹配。

答案 2 :(得分:0)

File :: Find :: Rule使这个简洁明了:

use File::Find::Rule;

my $uid_tree = getpwnam('tree');
my $gid_tree = getgrnam('tree');

my @files =
   File::Find::Rule
   ->file()
   ->uid($uid_tree)
   ->gid($gid_tree)
   ->in('.');

价: