web-dev-qa-db-fra.com

Comment obtenir une liste de tous les propriétaires de fichiers dans un répertoire

J'essaie actuellement de réparer mon système de quotas. Mon problème est que je ne peux pas déterminer si tous les fichiers d'un répertoire appartiennent au même utilisateur. Si possible, existe-t-il un moyen de répertorier (de manière récursive) les différents propriétaires de fichiers dans un répertoire?.

par exemple get-owners-of DIRNAME

12
Jack7076

Vous pouvez utiliser find pour imprimer l'utilisateur (propriétaire) et le groupe, puis extraire les combinaisons uniq, par exemple.

$ 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
steeldriver
stat -c %U * 

listera les propriétaires de tous les fichiers.

Cela peut être trié et les doublons supprimés en le canalisant dans sort -u:

stat -c %U * | sort -u

Comme l'a souligné Steeldriver, ce n'est pas récursif. J'ai manqué que cela a été demandé. Il peut être rendu récursif en activant globstar:

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

Dans l'ensemble, réponse de steeldriver est probablement meilleur et devrait être la réponse acceptée ici :)

19
vidarlo

Vous trouverez peut-être plus efficace de rechercher directement les fichiers non appartenant à l'utilisateur ...

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

Méthode de bricolage via 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])  )

Cela effectue une itération sur tous les noms de fichiers répertoriés sur la ligne de commande, obtient l'UID du propriétaire du fichier et l'utilisation de pwd module obtient le nom d'utilisateur du propriétaire. Après cela, le nom de fichier et le nom d'utilisateur sont joints pour une jolie impression et séparés par deux points. Fonctionne comme tel:

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