有效搜索文件和目录的唯一所有者

有效搜索文件和目录的唯一所有者

我想查看某个目录下所有文件和目录的唯一所有者。

我努力了:

ls -ltR <dir-path> | grep -P '^[d|\-]' | awk '{print $3}' | sort | uniq

这犯了尝试解析ls输出的主要错误,但它是有效的——直到我在一个复杂的目录结构中包含大量文件的目录上尝试它,它陷入困境并挂起。

虽然我可以解决这个问题,简单地在较低级别执行命令并逐步完成,但我想知道是否有一种更有效的方法可以一次性完成此操作?

答案1

这是使用 find 的稍短版本:

find <path> -printf "%u\n" | sort -u

根据目录结构的复杂性,这可能会也可能不会更有效。

答案2

对于此类任务,我喜欢分解 perl。有一个名为File::Findwhich is core 的模块,对此非常有用:

#!/usr/bin/perl
use strict;
use warnings;

use File::Find;

my %found;

sub collate_users {
    next if -d;
    my ($dev,  $ino,   $mode,  $nlink, $uid,     $gid, $rdev,
        $size, $atime, $mtime, $ctime, $blksize, $blocks
    ) = stat;

    if ( not $found{$uid} ) {
        print "$uid : ", getpwuid($uid),"\n";
    }
    $found{$uid}++;
}

find( \&collate_users, "/path/to/search", "/another/path/to/search" );

这将以“找到的顺序”打印 - 如果您愿意,您可以稍后进行整理和排序(如果您愿意的话,可以按文件计数):

foreach my $uid ( sort { $found{$a} <=> $found{$b} } keys %found ) {
    print getpwbyuid($uid)," ($uid) has $found{$uid} files\n";
}

相关内容