web-dev-qa-db-ja.com

フォルダーの使用状況をメガバイトで表示する正しい方法は何ですか

フォルダサイズをカウントするためにdu -bsを使用しています。

du -bs /folder

結果は96342835in Bytes ...ですので、MB単位は(/ 1024/1024)91,87MBです。

OK、でも私が使うとき

du -hs /folder

結果は異なります。 99MBまたは

 du -s taxikondrat.cz/

100980キロバイト=98,61MB

別の方法を試しました。すべてにおいて私は異なる結果を得ました。例えば。

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

96059200バイトを得たので、91,60MB

ls -ARgo "$@" | awk '{q += $3} END {print q}'

96338739バイトなので、91,87 MBです。丸め後も同じですが、バイト数では少し異なります。

ケーキの桜はグーグルです:) enter image description here

それで、何が本当ですか?なぜこの違いがあり、最も正確なカウントを行う方法は何ですか?

5
Pavel

リンゴとオレンジを比較しています。

ls -sは、ファイル内の実際のデータの長さに基づいてファイルのサイズを与えることに注意してください。

デフォルトでは、duコマンドは、サイズに基づいたディスク使用量を示します。ディスクスペースはブロック単位で割り当てられ、ファイルの長さがブロックサイズの整数倍になることはほとんどないため、データで部分的にのみ満たされているが、別のファイルでは使用できないブロックが作成されます。
言い換えると、ファイルシステムのブロックサイズが512バイトの場合、1バイトの長さのファイルはディスク上で512バイトを占め、511バイトのファイルと同じです。 513バイトのファイルには、2ブロックと1024バイトのディスク容量が必要です。

合計のdu fileディスク使用量は、ほとんどの場合、特に多くの(小さい)ファイルや非常に大きなブロックサイズがある場合、ls -s fileファイルサイズの合計より大きくなります。

du -bスイッチを使用すると、ブロックはカウントされませんが、ls -sのように動作します。

-b--apparent-size --block-size=1と同等
--apparent-size
ディスク使用量ではなく、見かけのサイズを印刷します。見かけのサイズは通常は小さくなりますが、(「スパース」)ファイルの穴、内部フラグメンテーション、間接ブロックなどのために大きくなる可能性があります-h, --human-readable
人間が読める形式の印刷サイズ(1K 234M 2Gなど)

du -shは、ブロックの総数を人間が読める形式に変換します。
du -bhは、見かけのサイズの合計を人間が読める形式で出力します。

私のMaildirでは、かなり異なる多くの小さなファイルがあります:

$ du -bs cur/
84088436    cur/
$ du -s cur/
91800   cur/
$ du -sh cur/
90M cur/
$ du -bh cur/
81M cur/

[〜#〜] edit [〜#〜]人間が読める出力とメガバイトへの変換に関しては、全体を見落とさないでください "SIの10進数プレフィックスと2進数の倍数、1000の累乗と1024の累乗で人間が読める形式の論争

このページの背景については、次を参照してください。 https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html 方法についてGNUユーティリティなどlsおよびduとして表示します。

首都 Mdu -hの出力は1,048,576バイトを表します。

11
HBruijn