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

Jac*_*076 16 filesystem permissions command-line quota

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

例如 get-owners-of DIRNAME

ste*_*ver 30

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

$ 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
Run Code Online (Sandbox Code Playgroud)


vid*_*rlo 19

stat -c %U * 
Run Code Online (Sandbox Code Playgroud)

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

可以通过管道将其排序并删除重复项sort -u

stat -c %U * | sort -u
Run Code Online (Sandbox Code Playgroud)

正如 steeldriver 所指出的,这不是递归的。我错过了这是被要求的。可以通过启用 globstar 使其递归:

shopt -s globstar
stat -c %U **/* | sort -u
Run Code Online (Sandbox Code Playgroud)

总而言之steeldriver 的答案可能更好,应该是这里公认的答案:)

  • @CSM 我猜如果 `ARG_MAX` 是一个问题,你可以做 `printf '%s\0' **/* | xargs -0 stat -c %U`(因为 `printf` 是一个内置函数,它不应该有相同的长度限制) (2认同)

rra*_*nza 5

您可能会发现直接搜索属于用户的文件更有效...

find /directory ! -user username -printf "%u %p\n" 
Run Code Online (Sandbox Code Playgroud)