Как получить список всех владельцев файлов в каталоге

Я в настоящее время пытаюсь зафиксировать свою систему квоты. Моя проблема состоит в том, что я не могу определить, принадлежат ли все файлы в каталоге тому же пользователю. Если возможно есть ли способ перечислить различных владельцев файлов в каталоге (рекурсивно).

например, get-owners-of DIRNAME

12
задан 22 April 2018 в 14:09

4 ответа

Можно использовать 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
23
ответ дан 23 November 2019 в 03:27
stat -c %U * 

перечислит владельцев всех файлов.

Это может быть отсортировано и дубликаты, удаленные путем передачи по каналу его в sort -u:

stat -c %U * | sort -u

Как указано steeldriver, это не рекурсивно. Я пропустил это, относительно этого попросили. Это может быть сделано рекурсивным путем включения globstar:

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

Alltogether, ответ steeldriver, вероятно, лучше и должен быть принятым ответом здесь :)

19
ответ дан 23 November 2019 в 03:27

Можно найти более эффективным непосредственно искать файлы, не принадлежавшие пользователю...

find /directory ! -user username -printf "%u %p\n" 
5
ответ дан 23 November 2019 в 03:27

Сделай сам метод с помощью Python:

#!/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 владельца файла, и использующий pwd модуль получает имя пользователя владельца. После этого, имя файла и имя пользователя, к которому присоединяются для симпатичной печати и разделенное через двоеточие. Работы как так:

$ ./get_owners.py /etc/* 
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
4
ответ дан 23 November 2019 в 03:27

Другие вопросы по тегам:

Похожие вопросы: