如何获取目录中文件的所有所有者列表

如何获取目录中文件的所有所有者列表

我目前正在尝试修复我的配额系统。我的问题是我无法确定目录中的所有文件是否都属于同一用户。如果可能的话,有没有办法列出目录中文件的不同所有者(递归)。

例如get-owners-of DIRNAME

答案1

您可以用来find打印用户(所有者)和组,然后提取唯一组合,例如

$ sudo find /var -printf '%u:%g\n' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab

答案2

stat -c %U * 

将列出所有文件的所有者。

可以对其进行排序,并通过管道将其输入到sort -u

stat -c %U * | sort -u

正如steeldriver 指出的那样,这不是递归的。我错过了这个要求。可以通过启用 globstar 来实现递归:

shopt -s globstar
stat -c %U **/* | sort -u

全部一起,steeldriver 的回答可能更好,应该是这里接受的答案:)

答案3

您可能会发现直接搜索文件更有效率不是归用户所有...

find /directory ! -user username -printf "%u %p\n" 

答案4

通过 Python 进行 DIY 方法:

#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
    username = pwd.getpwuid(os.stat(f).st_uid).pw_name
    print( ":".join([f,username])  )

这将遍历命令行上列出的所有文件名,获取文件所有者的 UID,并使用密码模块获取所有者的用户名。之后,文件名和用户名合并以进行漂亮的打印,并通过冒号分隔。工作原理如下:

$ ./get_owners.py /etc/* 
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .

相关内容