尋找目錄分支中某些檔案的總大小

尋找目錄分支中某些檔案的總大小

假設有一個影像儲存目錄,例如,,./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

首先,您需要兩件事:

  • 選項-c,du告訴它產生總計;
  • 任何一個**啟用說明) 或find例子) 或遍歷子目錄。
du -ch -- **/*.jpg | tail -n 1

答案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=-

相關內容