답변:
당신이 사용할 수있는 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
-mindepth 1
전 -printf
. 그리고 sudo
OP가 필요한 상황에서 작동하지 않는 경우에는 예제에 포함 시키지 않습니다.
-t:
이 상황에 변화를?
stat -c %U *
모든 파일의 소유자를 나열합니다.
다음 항목으로 파이프하여 정렬하고 중복을 제거 할 수 있습니다 sort -u
.
stat -c %U * | sort -u
스틸 드라이버가 지적했듯이 이것은 재귀 적이 지 않습니다. 나는 이것이 요구되는 것을 놓쳤다. globstar를 활성화하여 재귀 적으로 만들 수 있습니다.
shopt -s globstar
stat -c %U **/* | sort -u
전체적으로, 스틸 드라이버의 대답 은 아마도 더 좋으며 여기에서 허용되는 대답이어야합니다 :)
ARG_MAX
당신이 할 수있는 문제 인 것 같아요 printf '%s\0' **/* | xargs -0 stat -c %U
( printf
내장되어 있기 때문에 길이 제한이 동일하지 않아야 함)
파이썬을 통한 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를 가져오고 pwd 모듈을 사용 하면 소유자의 사용자 이름을 가져옵니다. 그 후 파일 이름과 사용자 이름이 합류하여 콜론으로 분리되었습니다. 다음과 같이 작동합니다.
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .