特定のフォルダー内のすべてのJPEGの合計サイズを取得しようとしていますが、du
にパイプしている間、オプションの組み合わせが少ないため、これは機能しないようです。
find -type f -iname "*.jpg" | du -sch
166G .
166G total
それらはすべて、ディレクトリ内のすべてのファイルの合計を出力します。
du
に渡すファイルの合計ファイルサイズのみを取得するにはどうすればよいですか?
質問からわかるように、ディレクトリが1つしかない場合、最も簡単な方法は、配管を完全に回避し、代わりに実行することです。
du -sch *.jpg
ファイルを引数としてdu
を呼び出すと、引数文字列の長さ(数千ファイル)(*)によって制限されます。大量のファイルが予想される場合は、--files0-from=F
引数を使用してリストファイルでファイルを指定する必要があります(標準入力には-
を使用できます)。
find . -name '*.JPG' -print0 | du -msc --files0-from -
(*)また、... | xargs du -c
を使用しても、xargsはファイルリストをバッチで切り刻み、du
を数回呼び出すため、合計が複数になるため、役に立ちません。
ここで単にdu
にパイプするだけではうまくいかない理由はわかりませんが(理由を詳しく説明した回答を投稿してください)、-exec
を使用してdu
を実行するとうまくいくことがわかりました。動作し、+
構文でも非常に高速です。
find -type f -iname "*.mov" -exec du -ch {} +
これにより、特にファイルの列挙にfind
をすでに使用していたため、これまでの配管よりもはるかに効率的になります。また、どのような場合でも、JPEGファイル拡張子と一致します。
上記は、最終的に合計自体を印刷する前に、各ファイルを個別のサイズで印刷することに注意してください。印刷するにはのみすべてのファイルの合計ファイルサイズは、次を使用します。
find -type f -iname "*.mov" -exec du -ch {} + | tail -n1