コマンドラインからLinuxまたはMac OS Xディレクトリのサイズを取得するにはどうすればよいですか?[複製]


74

LinuxまたはMac OS Xディレクトリ内のすべてのファイルのサイズを(再帰的に)見つけるために使用するコマンドは何ですか?


2
あなたが使用することができ-k1Kバイトのブロックサイズを使用するためのオプションを
がzoker

Disk Inventory Xと呼ばれるこの無料ソフトウェアをお勧めします。ここからダウンロードしてください。derlien.comは、mac osxに簡単に使用できます
-Nimitack

代わりにdu、私が使用しncdu、あなたはここで参照を見つけることができ、remysharp.com/2018/08/23/cli-improved
アラン・ドン

回答:


82

duOS X で使用されるBSDバージョンは、512バイトブロックのサイズを報告します。サイズは基本的に次の512バイト値に切り上げられます。これにより、データ量よりも大きいディスク上のスペースがわかります。小さなファイルがたくさんある場合、違いは大きくなる可能性があります。

以下に例を示します。

これはregularの値duです。512バイトブロック単位です。

$ du -s
248   .

この-hフラグは、キロバイト単位の読みやすい数値になります。予想どおり、これは512バイトブロックの数の半分です。

$ du -hs
124K  .

最後に、あなたが使用することができますfindし、awkあなたのファイルの実際のバイト数の合計を与えます。これはちょっと遅いですが、動作します:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

この値は、Finderの「情報を見る」ウィンドウで報告される数値と正確に一致します。(この一連のファイルには、奇妙なフォークやxattrsはありません。)によって報告される値よりも大幅に小さいですdu

仕組みは次のとおりです。すべてのファイルのリストを取得し、それらをに渡しますls -l。次にawk、バイトをカウントアップするために使用されます。-type fファイルのみ(とないディレクトリが)に送信されますようにフラグがありますls。このフラグがないと、ディレクトリ名もに送信されls、各ファイルは2回リストされます。1回は個別のファイルとして、もう1回はディレクトリ内のアイテムとして。

のGNUバージョンでduは、ブロックではなく実際のバイトで値を指定できます。のBSDバージョンduがそれほど柔軟ではないのは残念です。


素晴らしい説明。興味深いことに、duGNU coreutilsから-bオプションを使用すると、findパイプとは異なる結果が得られます。36 GBのディレクトリの場合、82 KBの差が生じます。
ステファンシュミット

これをより人間が読める形式で印刷する方法はありますか?
-anon58192932

75

単一ファイルのサイズを表示する

du -h path_to_a_file

ディレクトリ、各サブディレクトリ、および個々のファイルの内容のサイズを表示します。

du -h path_to_a_directory

ディレクトリの内容のサイズを表示します。

du -sh path_to_a_directory


25
du -schより読みやすいものが必要な場合。
ジョーイ

@Johannes、このコメントを回答として投稿する必要があると思いますので、受け入れられますか?
アルジャン

(少なくともMac OS Xでは)-cオプションが冗長であり、du -shは小計を抑制します。
ダリルスピッツァー

ああ、自分の答えを受け入れることができるとは知りませんでした。今では、少なくとも人々は質問が解決されたことを知っています。
アルジャン

私は、私の改善である新しい答えを喜んで受け入れます。
ダリルスピッツァー

9

du- ファイルサイズでなくディスクの使用を指示します

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

上記の端末コード(osx 10.6のim)は最高の結果を提供し、「find ... -exec」よりも高速です

簡単なベンチマーク

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s

あなたがUbuntuで同じことをやってみたい場合:find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
ロドリゴポロ

この結果を人間が読める形式で取得する方法はありますか?
-anon58192932

6

du -ah .どのファイルとディレクトリのサイズを再帰的に表示するかを使用できます。

これはと組み合わせることができるsortので、現在のフォルダーの上位20個のディレクトリが表示されます。

du -ah . | sort -rh | head -20

注意:オプション-hのためには、sortOSX / BSDでは利用できません、あなたがインストールしてきたようsortcoreutils(例えば経由brew)とbinパスを次のように適用するPATH、例えば

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

それ以外の場合:

du -a . | sort -rn | head -20

macOS 10.12.1 #du -ahで最初のコマンドが機能しません。| ソート-rh | head -20 sort:無効なオプション-h詳細については、「sort --help」を試してください。
nucleartux

3
@nucleartuxコマンドの下の注を確認してください。これは、あなたが経由MacOSでインストールできるソートGNUで動作しますbrew install coreutils、そうでない場合はなしで最後にBSDのsortコマンドを使用します-h
ケノーブ

2

すべてのアプリケーションを組み合わせて、人間が読める出力と組み合わせた結果は次のとおりです。

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

要旨へのリンク:https : //gist.github.com/mlegenhausen/9365461

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.