Find

遞歸列出文件,按使用者分組並彙總其大小

  • April 16, 2019

我需要驗證我的 Linux 伺服器上每個使用者佔用的大小(所有文件遞歸地在我的數據文件夾中)。

使用下面的程式碼,我可以獲得我的所有文件及其使用者,但我不知道之後如何對它們進行分組和求和。

#> find . -type f -ls | sort -k5

有沒有人有解決這個問題的想法?

使用 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列印%D+%i每個文件的設備+inode 編號 ( )(對於指向同一文件的硬連結,它們將是相同的)、使用者名和磁碟使用情況(以 512 字節為單位)。

:用作欄位分隔符,因為使用者名通常不包含那些,因為它們是使用者數據庫中的欄位分隔符(如/etc/passwd或 的輸出getent passwd)。

該列表被饋送到awk,我們更新一個du關聯數組,該數組以使用者名($2第二個欄位)為索引,用於第一個欄位尚未出現的每個文件seen

在 處END,我們遍歷關聯數組的元素以報告每個使用者的累積磁碟使用情況(乘以數以獲取以字節為單位的資訊)。

引用自:https://unix.stackexchange.com/questions/494806