ディレクトリ内のファイルのすべての所有者のリストを取得する方法


14

現在、クォータシステムを修正しようとしています。私の問題は、ディレクトリ内のすべてのファイルが同じユーザーによって所有されているかどうかを判断できないことです。可能であれば、ディレクトリ内のファイルの異なる所有者を(再帰的に)リストする方法があります。

例えば get-owners-of DIRNAME


1
すべての所有者のみ、またはすべてのファイルとその所有者、または特定のユーザー以外が所有するすべてのファイルをリストしますか?
バイトコマンダー

回答:


25

を使用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

1
ディレクトリコンテンツのみを評価するには(検索自体のルートディレクトリは評価しない)、-mindepth 1beforeを追加し-printfます。またsudo、OPが必要なコンテキストで動作しないように見える場合は、この例には含めません。
デビッドフォースター

-t:この文脈では違いを作りますか?
カスペルド

@kasperdの良い点-たぶんそうでありません(ソート順に影響するかもしれません-しかし、私たちはそれほど興味がありません)
-steeldriver

19
stat -c %U * 

すべてのファイルの所有者をリストします。

これは、ソートと重複がにそれをパイプによって除去することができますsort -u

stat -c %U * | sort -u

steeldriverが指摘したように、これは再帰的ではありません。これが求められたことを逃しました。globstarを有効にすることで再帰的にできます:

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

全体として、steeldriverの答えはおそらくより良く、ここで受け入れられる答えであるはずです:)


検索に大量のファイルがある場合、コマンドラインの長さを超えないでしょうか?もしそうなら、@steeldriverの答えの方が良いです。
CSM

@CSMになります。だからこそ、多くの場合、スチールドライバーの方が良いと答えます。
vidarlo

2
@CSM私ARG_MAXはあなたができる問題であると思いますprintf '%s\0' **/* | xargs -0 stat -c %Uprintf
ビルトインである

5

ユーザーが所有していないファイルを直接検索する方が効率的な場合があります...

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

4

Python経由の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
. . .
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.