Find
遞歸列出文件,按使用者分組並彙總其大小
我需要驗證我的 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
,我們遍歷關聯數組的元素以報告每個使用者的累積磁碟使用情況(乘以塊數以獲取以字節為單位的資訊)。