リスト内のファイルはどのくらいのディスク容量を消費しますか?

リスト内のファイルはどのくらいのディスク容量を消費しますか?

リスト内のファイルが使用するディスク容量を確認するには?バリエーションを探しています。

du -s *.sql

合計だけ見たいです。上記のコマンドは常にファイルごとに1行を表示します。

答え1

du -c合計を取得し、最後の行tail(合計)のみを取得するようにパイプする場合:

du -c -- *.sql | tail -n 1

du自分で報告する方法はないようです。ただセットに含まれるファイルの総数。

これは--必須ではありませんが、スクリプトでこのコマンドを使用する場合は強くお勧めします。オプションの終わりを表示し、面白いファイル名を避けます。詳しくはこちらをご覧ください。"--"(二重ダッシュ) とはどういう意味ですか?


いくつかの技術的事項:

「隠し」ファイル*.sql(ドットで始まるファイル名)は含まれません。これは、globにはデフォルトで隠されたファイルが含まれていないためです。

この目的のために、*.sqlディレクトリには次duのものが含まれます。みんなこれらのディレクトリのファイルに再帰的にアクセスします。

zshを使用すると、除外ディレクトリを作成できます*.sql(^/)。または*.sql(D)隠しファイルが含まれています。詳しくはzsh glob修飾子をご覧ください。

この目的のために、*.sqlシンボリックリンクは、duリンクが指すターゲットのサイズではなく、リンク自体のサイズを計算する。du -Hリンク先のサイズを取得するために使用されます。

duGNUを含むほとんどの実装では、いかなる場合でもdu固有のファイルのディスク使用量のみを計算します。したがって、foo.sqlハードリンクbar.sql(またはシンボリックリンクが-H使用されている場合)の場合、ディスク使用量は一度だけ計算されます。

ハードリンクをサポートしていないファイルシステムにファイルをコピーしようとすると、混乱が発生する可能性があります。ほとんどの場合、ハードリンクファイルは2回コピーされるため、ターゲットシステムに表示されているよりも多くのディスク容量が必要になりますdu

GNU実装では、duこのオプションを使用して重複排除をスキップできます。-l

答え2

あなたの例ではうまくいかないものは何ですか?お金を与える?  man duこの-cオプションを表示すると、次のように合計が表示されます。

du -sc -- *.sql

-hまたは、パラメータが好きかもしれません-k

答え3

-cあなたの質問は非常にあいまいですが、合計を生成するためのフラグを探しているようです。

du -c -- *.sql

答え4

findを使用してファイルのリスト(または他のもの)を生成できる場合は、次のこともできます。

find {directory} {matching expression} -exec stat -c "%s" {} \; | awk 'BEGIN{total=0} {total=total+$1} END{print total/1000000.00}'

たとえば、/some/dir にあるすべての .jar ファイルの合計サイズ (MB) を表示するには、次のようにします。

find /some/dir -name '*.jar' -exec ...

これはファイルごとに1つのプロセスを実行しますが、結果は非常に高速です。

関連情報