コマンドラインでディレクトリのサイズを取得するにはどうすればよいですか?


1066

lsオプション付きのコマンドを使用して、ディレクトリ(ディレクトリとサブディレクトリを含む)のサイズを取得しようとしましたl。ファイル(ls -l file name)で動作するようですが、ディレクトリのサイズ(たとえばls -l /home)を取得しようとすると、4096バイトしか取得できませんが、全体としてははるかに大きくなります。


18
1)厳密に言えば、できません。Linuxにはフォルダーではなくディレクトリがあります。2)ディレクトリ(他のファイルを指すiノードを保持する特別なファイル)のサイズと、そのディレクトリのコンテンツのサイズには違いがあります。他の人が指摘したように、duコマンドは後者を提供します。
jamesqf

11
あなたが新しいように見えるので-h-lオプションに追加できる便利なオプション(つまりls -lh)を指摘して、ファイルのサイズを1130301ではなく1.1Mのような人間に優しい表記で出力するようにします。 「du -hs@samがディレクトリに関する質問の答えとして与えたコマンドでは、「人間が読み取れる」ことも意味しdf -h、人間の読み取り可能なディスク上の使用済みおよび空き領域の量も表示されます。
msouth

回答:


1491

du -sh file_path

説明

  • dud isc u sage)コマンドはfile_pathスペース使用量を推定します
  • オプション-shは(からman du)です:

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    複数のディレクトリをチェックして合計を表示するには、次を使用しますdu -sch

      -c, --total
             produce a grand total
    

44
...あなたは、ハードリンク;-)持っていない限りstackoverflow.com/questions/19951883/...
Rmano

15
これは、それが要約されている私の大好きな答えの種類<3およびコマンドへの導入の一種であるduとも、あなたは、詳細を検索する方法を与えるman du...

Unix系メーカーのヒント:次回は、最初に「diskusage」コマンドを作成するか、または「ディスク使用」コマンドを作成します...そしてショートカット...;)
jave.web

これは、と非常に素晴らしい作品find 、電流経路内の特定のサブディレクトリ内のスペースの量をカウントする例: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
アレックスGlukhovtsev

321

du次のコマンドを使用します。

du -sh -- *

現在のディレクトリにあるすべての隠されていないディレクトリ、ファイルなどの累積ディスク使用量を人間が読める形式で提供します。

このdfコマンドを使用して、ディレクトリを含むファイルシステムの空き領域を知ることができます。

df -h .

4
du -sh *そのディレクトリ内のファイルのいずれかがダッシュで始まる場合、「不明なオプション」エラーをスローし始めます。より安全にdu -sh -- *
mpen

1
du -sh *隠しフォルダのメモリ使用状況を表示しません
プラシャント・プラブハカシン

4
du -sh -- * .*ドットファイルを含めるため。これは.git、たとえば大きなディレクトリを含める場合に便利です。あるいは、zsh setopt globdotsでは、デフォルトでドットファイルをグロブできます。
-cbarrick

1
何をし--ますか?私はそれがシェルに適用される知っているビルトインをオプションの引数を終了するが、duビルトインではない、と私は、この使用法はのために文書化され表示されませんdulinux.die.net/man/1/du
flow2k

時々-b--apparent-size)を追加したい場合があります
有効

196

duあなたの友達です。ディレクトリの合計サイズを知りたい場合は、そこにジャンプして実行します:

du -hs

また、どのサブフォルダーがどのくらいのディスク容量を占有するかを知りたい場合は!このコマンドを次のように拡張できます。

du -h --max-depth=1 | sort -hr

すべてのサブフォルダー(レベル1)のサイズが表示されます。出力がソートされます(一番上のフォルダー)。


Linuxのいくつかの(おそらく古い?)バージョンでは、sortにはhスイッチがないため、次に見つけられるコマンドは次のとおりです。du -c --max-depth = 1 | sort -rn
richhallstoke

ncduファイルを使用する場合、@ richhallstoke はデフォルトでサイズの降順にソートされます。
アームフット

3
「| sort -hr」の+1
18年

67

du適切な出力を得るには、見かけ上100個の引数を渡す必要があるため、使用が複雑になる可能性があります。また、隠しフォルダーのサイズを把握することはさらに困難です。

あなたの人生を楽にして使いなさいncdu

NCDU

簡単に参照できるフォルダーごとのサマリーを取得します。


9
少なくともシステムにソフトウェアをインストールできる人にとっては、これが正しい答えになるはずです。残念ながら、ほとんどの人がこれを見るのに十分なほどスクロールダウンするとは思わない。
-DavidR

@ RickyNotaro-Garciaいいえ、これは隠されたオブジェクトを無視し、大きなディレクトリでハングします。数十本のパイプを使用することで問題が解決する可能性がありますが、なぜあなたの人生を無駄にしますか。
Teque5

@ RickyNotaro-Garcia私のコメント全体を読んでくださいあなたの試みは隠されたオブジェクト無視し、大きなディレクトリでハングします。
Teque5

2
ncdu素晴らしいです。忘れるときはいつもこのコマンドを探します。高速でナビゲートしやすく、大きなフォルダを簡単に見つけることができます。参考までに、macOSでも利用でき、おそらくすべてのLinuxマシンで利用できます。
ルーカス

..またncdudキーを押すことでフォルダを直接削除できます
ccpizza

32

他にも言及されていますが、Ncduduも言及したいと思います -これはncursesバージョンでduあり、対話性を提供します:ディレクトリ階層を直接探索し、サブディレクトリのサイズを見ることができます。


26

このduコマンドは、ファイルのディスク使用量を表示します。

この-hオプションは、結果を人間が読める形式(4k、5M、3Gなど)で表示します。

du -h (file name)

22

上記の例はすべて、ディスク上のデータのサイズ(つまり、特定のファイルが使用しているディスクスペースの量で、通常は実際のファイルサイズよりも大きい)を示します。データが実際にこの特定のディスクに保存されておらず、iノード参照のみが存在する場合、これらが正確なレポートを提供しない状況がいくつかあります。

この例では、単一ファイルでls -lを使用しました。これは、ディスク上のサイズではなく、ファイルの実際のサイズを返します。

実際のファイルサイズを知りたい場合は、-bオプションをduに追加します。

du -csbh .

はい。ファイルを圧縮および重複除去するsdfsを使用しているため、なぜこのような低い数値が報告されているのかわかりませんでした。デュ-b:LSでのファイルの実際のサイズは、使用して見つけることができます
ライアンShillington

15

個人的には、使用したくない場合はこれが最適だと思います ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

これは、現在のドライブに残っているディスク容量を示し、すべてのファイル/ディレクトリが占める容量を示します。例えば、

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

参考までに、ディスク上のサイズを報告しているようです。つまり、おそらく最も近い4KBにパディングされます。
mpen


9

現在のディレクトリの下にあるすべてのファイルを再帰的に検索し、サイズを合計します。

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

私が使用する-not -type d通常のファイルの大きさ(だけでなく、合計する-type f)だけでなく、その上のシンボリックリンクの大きさとを。
anton_rh

ファイルを保存するために必要なオーバーヘッドは得られず、ファイル自体のサイズだけが得られるため、これは素晴らしいことです。
bballdave025

9

ここにあなたの.bash_aliasesの関数があります

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

サンプル出力:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

サブディレクトリの場合:

$ dusort .
$ dusort /var/log/


6

ご了承ください duので、ディレクトリはディレクトリ内のすべてのファイルだけの合計サイズよりも通常大きいメディアに占めるスペースを印刷しdu、アカウントにメディアに保存されているすべての補助情報の大きさを取るには準拠したディレクトリを整理しますファイルシステム形式で。

ファイルシステムが圧縮可能な場合、 duによって内部的に圧縮される可能性があるため、すべてのファイルの合計サイズよりも小さい数を出力する可能性があります。スパースファイルがある場合も同じです。

ディレクトリにハードリンクがある場合、 duいくつかの異なるファイルがメディア上の同じデータを参照するため、より小さい値も印刷される場合があります。

ディレクトリ内のすべてのファイルの単純な合計サイズを取得するには、次の1行のシェル式を使用できます(GNUシステムを想定)。

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

またはさらに短い:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

ディレクトリ内のすべての非ディレクトリファイル(およびそのサブディレクトリ)のサイズを1つずつ合計するだけです。シンボリックリンクについては、シンボリックリンクのサイズを報告することに注意してください(シンボリックリンクが指すファイルのサイズではありません)。


5

使用できます

du -sh directory/

そして

du -sh filename

フォルダーまたはファイルが占めるスペースを知るため。

df -h

ディスクの使用量を人間が読める形式で表示します-h

guiというGUIベースのプログラムもありDisk Usage Analyzerます。


5

動作するPOSIXスクリプトは次のとおりです。

  • ファイル
  • ファイル
  • ディレクトリ
  • ディレクトリ
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

ソース

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