ディレクトリブランチ内の特定のファイルのフルサイズを検索する

ディレクトリブランチ内の特定のファイルのフルサイズを検索する

./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

まず、2つのことが必要です。

du -ch -- **/*.jpg | tail -n 1

答え4

これまでに提供された答えは、findからduに渡されたファイルのリストが長すぎるため、findは自動的にリストをチャンクに分割しますtotal

手動で要約したりgrep total(ロケール!)他のコマンドを使用したりできます。私が知る限り、findで見つけたすべてのファイルの総数(KB)を取得する方法は2つだけです。
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 は null で終わる文字列 (改行ではない) を表します。
awk '{sum+=$1} END {print sum}':前のコマンドで出力されたファイルサイズを要約します。

参考までに別の方法は
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-

関連情報