ディレクトリのサイズを再帰的に調べて合計を取得する

ディレクトリのサイズを再帰的に調べて合計を取得する

このコマンドを使用して、必要なフォルダーを検索し、サイズをカウントしています。

find . -type d -name 'tmp_c*' | xargs du -hcs {} \; + 

私のバージョンの find は -exec をサポートしていません。しかし、これは機能します。ただし、検索文字列を含むディレクトリの合計が正しいかどうかはわかりません。コマンドを実行して less にパイプすると、各フォルダーのサイズがカウントアップされ、その後、定期的に合計が出力されます。次のようになります。

140K    ./r/g/userid/attach/tmp_c_241091464_2
68K     ./r/g/userid/attach/tmp_c_58367014_undefined
2.3G    total

出力をファイルにリダイレクトし、合計を grep すると、次のようになります。

2.3G    total
978M    total
1.1G    total
2.0G    total
1.1G    total

考えるこれで正しい数値が得られます。しかし、このコマンドをさらに一歩進めて、合計を 1 行にまとめて合計金額を表示する方法はありますか?

答え1

find . -type d -name 'tmp_c*' -print0 | du -hcs --files0-from -

これは、(十分に最近の?)GNU バージョンおよびを前提としていfindますdu

答え2

これは動作するはずです。私の EL4 ボックスでテストしました... これは私が持っている中で最も古いもので、うんざりします。EL3 をどのように使用するのかわかりません。

find . -type d -name 'tmp_c*' -print0|xargs -0 du -c|tail -1

で行ったcoreutils-4.5.3-26

答え3

https://stackoverflow.com/a/1323769/799204

代替の解決策の 1 つは、awk を使用することです。

しかし、このケースではスクリプトを適応させる必要があります。

find . -type d -name 'tmp_c*' -print0 | xargs -0 du -s | awk 'BEGIN { sum=0 } { sum+=$1 } END { print sum }'

出力は10進数になります

答え4

epel が 3 ではなく 5 から始まることを確認したので、オプションはカスタム スクリプトのみです。

ncdu をインストールすることもできます。

https://dev.yorhel.nl/ncduit

私はいつもこれを使用していますが、どのカスタム bash よりもはるかに簡単で高速です。(ディレクトリ間を移動できるので、時間を大幅に節約できます)。

関連情報