この質問にはすでに答えがあります:
LinuxまたはMac OS Xディレクトリ内のすべてのファイルのサイズを(再帰的に)見つけるために使用するコマンドは何ですか?
この質問にはすでに答えがあります:
LinuxまたはMac OS Xディレクトリ内のすべてのファイルのサイズを(再帰的に)見つけるために使用するコマンドは何ですか?
回答:
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の差が生じます。
単一ファイルのサイズを表示する
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のためには、sortOSX / 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
-k1Kバイトのブロックサイズを使用するためのオプションを