假設有一個影像儲存目錄,例如,,./photos/john_doe
其中有多個子目錄,其中駐留許多特定檔案(例如,*.jpg
)。如何計算分支下這些文件的摘要大小john_doe
?
我嘗試過du -hs ./photos/john_doe/*/*.jpg
,但這僅顯示單個文件。此外,這僅追蹤目錄的第一個嵌套級別john_doe
,例如john_doe/june/
,但跳過john_doe/june/outrageous/
。
那麼,我該如何遍歷整個分支,總結某些文件的大小呢?
答案1
find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$
如果由於檔案清單很長而需要多次調用du
,則將報告多個總計並需要求和。
答案2
du -ch public_html/images/*.jpg | grep total
20M total
給出.jpg
該目錄中文件的總使用情況。
要處理多個目錄,您可能必須以find
某種方式將其結合。
你可能會發現du 指令範例有用(還包括find
)
答案3
答案4
到目前為止給出的答案沒有考慮到從 find 傳遞到 du 的文件列表可能很長,以至於 find 會自動將列表分割成塊,從而導致total
.
您可以grep total
(區域設定!)手動總結,或使用不同的命令。據我所知,只有兩種方法可以獲取 find 找到的所有檔案的總計(以千位元組為單位):
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'
說明
find . -type f -iname '*.jpg' -print0
:尋找所有副檔名為 jpg 的文件,無論大小寫(即 *.jpg、*.JPG、*.Jpg...)並輸出它們(以 null 結尾)。
xargs -r0 du -a
: -r: 即使沒有傳遞參數,Xargs 也會呼叫該命令,而 -r 會阻止這種情況。 -0 表示以空字元結尾的字串(不是以換行符號結尾)。
awk '{sum+=$1} END {print sum}'
:總結上一個指令輸出的檔案大小
作為參考,另一種方式是
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-