du
のいくつかのバージョン 引数 --apparent-size
をサポート ディスク使用量の代わりに見かけのサイズを表示します。したがって、コマンドは次のようになります:
du -hs --apparent-size
Ubuntu 12.04 LTS に含まれている du の man ページから:
--apparent-size
print apparent sizes, rather than disk usage; although the
apparent size is usually smaller, it may be larger due to holes
in (`sparse') files, internal fragmentation, indirect blocks,
and the like
Unix 標準ツール (POSIX) を使用して、人間が判読できるディレクトリ サイズを表示するスクリプトを次に示します。
#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
u="+Ki+Mi+Gi+Ti+Pi+Ei";
split(u,unit,"+");
v=sum;
for(i=1;i<7;i++) {
if(v<1024) break;
v/=1024;
}
printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'
例:
$ ds ~
72.891 GiB
du
あると仮定します GNU coreutils から、このコマンドは、ファイル数に任意の制限なしで、ディレクトリ内の任意の数の通常のファイルの見かけの合計サイズを計算する必要があります:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
-l
を追加します du
へのオプション 内部にハードリンクされたファイルがいくつかあり、各ハードリンクを個別にカウントしたい場合 (デフォルトでは du
複数のハードリンクを 1 回だけカウントします)。
プレーンな du -sb
との最も重要な違い それは再帰的な du
です また、異なるファイルシステムによって異なる方法で報告されるディレクトリのサイズもカウントします。これを避けるために、find
コマンドは、通常のファイルのみを du
に渡すために使用されます .もう 1 つの違いは、シンボリック リンクが無視されることです (カウントする必要がある場合、find
コマンドを調整する必要があります)。
このコマンドは、通常の du -sb
よりも多くのメモリを消費します。 、 --files0-from=FILE
を使用しているため du
になります すべてのデバイス番号と inode 番号を保存 これは、複数のハード リンクを持つファイルのみを記憶するというデフォルトの動作とは対照的です。 (-l
オプションは、ハードリンクを複数回カウントするために使用されます。これは、デバイス番号と inode 番号を保存する唯一の理由は、既に処理されたハードリンク ファイルをスキップすることだからです。)
合計サイズの人間が読める表現を取得したい場合は、 -h
を追加するだけです オプション (これは du
のため機能します) 他の推奨される回答とは異なり、一度だけ呼び出され、合計サイズ自体を計算します):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
または (-b
の影響が心配な場合 その後、-h
によってオーバーライドされます )
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1