Como obter uma lista de todos os proprietários de arquivos em um diretório

11

No momento, estou tentando corrigir meu sistema de cotas. Meu problema é que não consigo determinar se todos os arquivos em um diretório pertencem ao mesmo usuário. Se possível existe uma maneira de listar os diferentes proprietários de arquivos em um diretório (recursivamente).

por exemplo, get-owners-of DIRNAME

    
por Jack7076 21.04.2018 / 13:08

4 respostas

19
stat -c %U * 

listará os proprietários de todos os arquivos.

Isso pode ser classificado e as duplicatas removidas pelo piping em sort -u :

stat -c %U * | sort -u

Como apontado pela steeldriver, isso não é recursivo. Eu perdi que isso foi pedido. Pode ser feito recursivo ativando globstar:

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

No total, a resposta da steeldriver provavelmente é melhor e deve ser a resposta aceita aqui:)

    
por vidarlo 21.04.2018 / 13:17
20

Você pode usar find para imprimir o usuário (proprietário) e agrupar e, em seguida, extrair as combinações uniq, por exemplo,

$ 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
    
por steeldriver 21.04.2018 / 13:19
5

Você pode achar mais eficiente pesquisar diretamente os arquivos não de propriedade do usuário ...

find /directory ! -user username -printf "%u %p\n" 
    
por rrauenza 21.04.2018 / 18:47
4

Método DIY 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])  )

Isso itera sobre todos os nomes de arquivos listados na linha de comando, obtém o UID do proprietário do arquivo e usa pwd obtém o nome de usuário do proprietário. Depois disso, nome de arquivo e nome de usuário se juntaram para impressão bonita e separados por dois pontos. Funciona assim:

$ ./get_owners.py /etc/* 
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
    
por Sergiy Kolodyazhnyy 21.04.2018 / 16:41