Linuxサーバーでは、各ユーザーが占めるサイズを確認する必要があります(すべてのファイルは私のデータフォルダに繰り返しあります)。
以下のコードを使用すると、すべてのファイルとそのユーザーを取得できますが、後でグループ化して合計する方法がわかりません。
#> find . -type f -ls | sort -k5
この問題を解決するアイデアを持っている人はいますか?
ベストアンサー1
GNUの使用find
:
find . -printf '%D+%i:%u:%b\n' | awk -F: '
!seen[$1]++ {du[$2] += $3}
END {for (user in du) printf "%20s: %lu\n", user, du[user] * 512}'
ユーザーあたりのディスク使用量をバイト単位で報告します。同様にdu
、ハードリンクを数回カウントしないように注意してください。
find
各ファイルのデバイス+iノード番号(%D+%i
)(同じファイルへのハードリンクの場合は同じ)、ユーザー名、およびディスク使用量(512バイト単位)を印刷します。
:
通常、ユーザー名には、ユーザーデータベースにあるように、これらのフィールド区切り文字が含まれていないため、フィールド区切り文字として使用されます(たとえば、/etc/passwd
または出力getent passwd
)。
awk
このリストは、最初のフィールドがまだ存在しないファイルごとに、ユーザーdu
名(2番目のフィールド)で索引付けされた連想配列を更新する場所に提供されます。$2
seen
では、END
連想配列の要素を繰り返して、各ユーザーの累積ディスク使用量(ユーザー数を掛けます)を報告します。彫刻情報をバイト単位で取得します。)