./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つのことが必要です。
- option
-c
、du
合計を生成するように指示します。 - 誰でも
**
(アクティベーションガイドライン)またはfind
(はい)またはサブディレクトリに移動します。
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=-