コマンドラインからディレクトリ(フォルダ)の合計サイズを確認するにはどうすればよいですか?


786

ディレクトリ(フォルダ)内のすべてのファイルの合計サイズ(ディスク使用量)を表示する簡単なコマンドはありますか?

私はこれらを試しましたが、彼らは私が望むことをしません:

  • ls -l、ディレクトリ内の個々のファイルのサイズのみを表示します。
  • df -h、ディスク上の空き領域と使用済み領域のみを表示します。



BTRFSのようなCoWファイルシステムではほとんど意味がないかもしれないことを思い出してください。
val

回答:


1266

コマンドはdu「ディレクトリごとに再帰的に各FILEのディスク使用量を要約します」、例えば

du -hs /path/to/directory
  • -h「人間が読める」数字を取得します。たとえば、140M代わりにget 143260(サイズはキロバイト)
  • -s要約用です(そうしないと、フォルダーのサイズだけでなく、フォルダー内のすべてのものも個別に取得さます)

使用している-hときに、以下を使用して人間が読める値をソートできます。

du -h | sort -h

-hオンのフラグは、sort「人間が読み取り可能な」サイズ値を考慮します。


すべてのファイルとディレクトリを再帰的に一覧表示したくない場合--max-depthは、表示するアイテムの数を制限するパラメーターを指定できます。最も一般的に、--max-depth=1

du -h --max-depth=1 /path/to/directory

9
余分な距離を行くことを尊重します。:)
myusuf3

93
私はdu -shそれを覚える方法として、またはDOOSH を使用します(注:コマンドは同じで、メモリ目的のためのコマンドラインフラグの構成だけです)
マルコCeppi

3
--apparent-sizeと呼ばれるduの便利なオプションがあります。(ディスク上のフットプリントとは対照的に)ファイルまたはディレクトリの実際のサイズを見つけるために使用できます。たとえば、わずか4文字のテキストファイルは約6バイトを占有しますが、通常のdu -sh出力。ただし、--apparent-sizeオプションを渡すと、出力は6になります。man duの説明:--apparent-sizeディスク使用量ではなく、見かけのサイズを出力します。通常、見かけのサイズは小さくなりますが、(「スパース」)ファイルの穴、内部断片化、間接ブロックのために大きくなる可能性があります
Hopping Bunny

4
これはOS Xでも機能します!おかげで、ローカルマシンとサーバーの両方でファイルを消去する方法を本当に探していましたが、自動化された方法はうまくいかないようでした。だから、私は走っdu -hs *て最大のディレクトリに行き、どのファイルがとても大きいかを見つけました...これはとても良い方法であり、一番いいのは何もインストールする必要がないということです!間違いなく私の賛成票に値する
開発

@BandaMuhammadAlHelal私は2つの理由があると思います:丸め(du選択された単位に値が1桁以上ある場合、やや独特の丸めがあり、小数を表示しません)、および古典的な1024対1000のプレフィックスの問題。値を表示する単位を変更duするオプション-B(または--block-size)があります。または、-b代わり-hにバイト単位の「生の」値を取得することもできます。
マルセルスティムバーグ

164

最近、ディレクトリサイズの概要をすばやく提供する、ncursesベースの優れた対話型ツールを見つけました。そのようなツールを何年も探しました。

  • ファイル階層をすばやくドリルダウン
  • たとえば、ツール内から巨大な一時ファイルを削除できます
  • とても速い

コマンドラインのバオバブと考えてください:

apt-get install ncdu

11
これは絶対に素晴らしいです!DaisyDiskと同様に、OSX用
subZero 14

3
ncduすごい!インストールしたら、これを実行しncdu /ます。システム上で最大のファイルを非常にすばやく見つけることができます。hncduのコンソールインターフェイス内で押します。これは非常に便利なショートカットを持っている
ヴラド・ardelean

これはまさに私が必要としていたものです。とてもシンプルでとても効率的です。純愛。
user3790897

52

これにより、サイズが再帰的に検出され、各フォルダー名の横に、合計サイズがすべて人間の形式で表示されます。

du -hsc *


10

tree このジョブの別の便利なコマンドです。

を介してインストールしsudo apt-get install tree、次のように入力します。

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

マンツリーから:

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

以下は、合計、フォルダー、およびファイルサイズを印刷するために使用しているものです。

$ du -sch /home/vivek/* | sort -rh

詳細

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

出力

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

答えは、それduがディレクトリの合計サイズを見つけるためのツールであることを明らかにしました。ただし、考慮すべき要素がいくつかあります。

  • 時々、du出力はファイルシステムによって割り当てられたスペースを報告するため、誤解を招く可能性があります。これは、個々のファイルのサイズの合計とは異なる場合があります。通常、ファイルシステムは、1文字だけを保存した場合でも、ファイルに4096バイトを割り当てます!

  • 2の累乗と10の累乗の単位による出力の違い。-hスイッチしdu、人間が読み取り可能な出力を与えるために2 ^ 10(1024)、2 ^ 20(1048576)等によりバイトの数を分割します。多くの人は、10の累乗(1K = 1000、1M = 1000000など)を見ることに慣れている可能性があり、その結果に驚くかもしれません。

ディレクトリ内のすべてのファイルのサイズの合計をバイト単位で見つけるには、次のようにします。

find <dir> -ls | awk '{sum += $7} END {print sum}'

例:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

find-ls-awkは、大きなフォルダー#1に対して誤った値を返します。新しいawkの場合は、--bignumまたはを追加でき-Mます。オプションでない場合はfind . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc #2を使用します。
goozez

使用されている2の累乗に問題がある場合は、--si
-muru

1

読み取り可能な形式のディレクトリサイズのみについては、以下を使用します。

du -hs directoryname

これはおそらく正しいセクションにありませんが、コマンドラインから次のことを試すことができます。

ls -sh filename

-s大きさで、かつ-h人間が読める形式です。

以下のよう-llsリストに表示するために使用します。

ls -shl


0

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

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

ソース


0

目的のディレクトリに多くのサブディレクトリがある場合は、次を使用します。

$ cd ~/your/target/directory
$ du -csh 

-c、-totalは総計を生成し
ます。
-s、-summarize は各引数の合計のみを表示します。

これにより、現在のディレクトリ内のすべてのファイル/フォルダーによるメモリ使用量の合計が生成されます。


-1

私が思う最高のものは次のとおりです:

du -h directory_name | tail -n1

これにより、関心のあるディレクトリのサイズのみが表示され、そのディレクトリ内のディレクトリおよびファイルのサイズは出力されません。

フォルダーのサイズが大きい場合、duの方が時間がかかることを付け加えます。このコマンドが機能するには、我慢してください。他のUNIXコマンドと同様に、timeこのコマンドの前に使用すると、このプロセスの合計時間を確認できます。

time du -h directory_name | tail -n1

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