ユーザーごとにグループ化してファイルを繰り返しリストし、サイズを合計します。

ユーザーごとにグループ化してファイルを繰り返しリストし、サイズを合計します。

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番目のフィールド)で索引付けされた連想配列を更新する場所に提供されます。$2seen

では、END連想配列の要素を繰り返して、各ユーザーの累積ディスク使用量(ユーザー数を掛けます)を報告します。彫刻情報をバイト単位で取得します。)

おすすめ記事