この質問にはすでに答えがあります:
LinuxまたはMac OS Xディレクトリ内のすべてのファイルのサイズを(再帰的に)見つけるために使用するコマンドは何ですか?
この質問にはすでに答えがあります:
LinuxまたはMac OS Xディレクトリ内のすべてのファイルのサイズを(再帰的に)見つけるために使用するコマンドは何ですか?
回答:
du
OS 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
がそれほど柔軟ではないのは残念です。
du
GNU coreutilsから-b
オプションを使用すると、find
パイプとは異なる結果が得られます。36 GBのディレクトリの場合、82 KBの差が生じます。
単一ファイルのサイズを表示する
du -h path_to_a_file
ディレクトリ、各サブディレクトリ、および個々のファイルの内容のサイズを表示します。
du -h path_to_a_directory
ディレクトリの内容のサイズを表示します。
du -sh path_to_a_directory
du -sch
より読みやすいものが必要な場合。
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
find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
du -ah .
どのファイルとディレクトリのサイズを再帰的に表示するかを使用できます。
これはと組み合わせることができるsort
ので、現在のフォルダーの上位20個のディレクトリが表示されます。
du -ah . | sort -rh | head -20
注意:オプション-h
のためには、sort
OSX / BSDでは利用できません、あなたがインストールしてきたようsort
にcoreutils
(例えば経由brew
)とbinパスを次のように適用するPATH
、例えば
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.
それ以外の場合:
du -a . | sort -rn | head -20
brew install coreutils
、そうでない場合はなしで最後にBSDのsortコマンドを使用します-h
。
すべてのアプリケーションを組み合わせて、人間が読める出力と組み合わせた結果は次のとおりです。
#!/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
-k
1Kバイトのブロックサイズを使用するためのオプションを