lsを使用してディレクトリとその合計サイズを一覧表示する


828

lsUnixで使用して、サブディレクトリとそのすべてのコンテンツの合計サイズを一覧表示することは可能4Kですか?

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

マニュアルページを精査した後、私は空っぽです。


4
代わりにdu -sを使用したい

21
アヒルの検索では:alias ducks='du -cksh * | sort -hr | head -n 15'
Sebi

回答:


1550

次のようなものを試してください:

du -sh *

の短いバージョン:

du --summarize --human-readable *

説明:

duD isk U sage

-s:指定した各ファイルの要約を表示します。(に相当-d 0

-h:「人間が読める」出力。単位のサフィックスを使用します:B yte、K ibibyte(KiB)、M ebibyte(MiB)、G ibibyte(GiB)、T ebibyte(TiB)、P ebibyte(PiB)。(BASE2)


55
また、-c(総計を生成する)も便利です。
メリディアス2013

50
du --max-depth 1は、ツリーの深さ1のファイル/フォルダーサイズのみを表示します。煩雑ではなくなり、フォルダー内の大きなフォルダーを簡単に見つけることができます。
CousinCocaine

12
隠しファイルも含める方法は?
Zakaria Braksa

5
zshの@Zakを使用すると、通常のファイルと一緒に*(D)隠し(d ot)ファイルを照合できます。bashを使用する場合* .[!.]*、両方を一致させるために使用できます。
Sebi

22
スペースがどこに行くのかを明確に把握することdu -sch * .[!.]* | sort -rhは素晴らしいです(ソートされた出力を表示します)Macでは:brew install coreutilsそして次にdu -sch * .[!.]* | gsort -rh
Guig

319

du -sk * | sort -nフォルダをサイズで並べ替えます。空きスペースを探すときに役立ちます。


11
| tail -r最初に最大のものでソートするためにを追加します。
Phrogz 2014年

68
sort -rn逆の数値順に並べ替えます。sort -rn | head -n 10興味がある場合は、上位のいくつかのみが表示されます。
AgileTillIDie 2014年

14
sort -rhdu -cksh *人間が読める単位をソートするのでうまく機能します。
Sebi

@Sebi -hは残念ながらMacでの並べ替えには有効なパラメータではありません
anon58192932

@Sebiも-cは不要で、du -ksh | sort -rnと同じdu -cksh | sort -rnです。とdu -ksh同じdu -ckshです。
hello_there_andy 2017

108
du -sh * | sort -h

これは人間が読める形式で表示されます。


6
詳細についてsort -hは、gnu.org / software / coreutils / manual / …を参照してください。これは103K、特に102M1.1Gなどをソートするためにあります。これは、現在多くのシステムで利用できるはずですが、すべてではありません。
Evgeni Sergeev 2014

duh -shm * | sort -n?
std''OrgnlDave

10
1つの小さな追加du -sh * | sort -rh(1つ目の大きなフォルダーを最初にリストするための-r)
artm

隠しファイル/ディレクトリを含めるには; du -sh $(ls -A) | sort -h
jmd_dk

55

現在のディレクトリから最大のディレクトリを人間が読める形式でリストするには:

du -sh * | sort -hr

行数を制限するより良い方法は

du -sh * | sort -hr | head -n10

-nリストされる行の数を制限するためにフラグのサフィックスを増やすことができる場所

サンプル:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

読みやすくなります:)


27

ls -lh形式で表示するには、次のコマンドを使用します。

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Awkコードの説明:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

出力例:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd

この出力を並べ替える方法はありますか?また、Macを使用しているすべての人にとって、これを削除すると見事に機能します--color=no
anon58192932

@ anon58192932出力をパイプして、sort --key=5,5h「人間が読める単位」を5番目の列から並べ替えることができます
Sebi

sort: stray character in field spec: invalid field specification 5,5h'`を返します。
Macが

@ anon58192932 Macに関する質問をすることができます。手伝ってくれる人がいると思います。この質問にはタグが付けられていますGNU / linux
Sebi

2
この答えを使用して色を保持する方法はありますか?
Pablo Canseco 2017

20

必要なコマンドは 'du -sk' du = "disk usage"です。

-kフラグを指定すると、デフォルトのディスクセクター(512バイトブロック)ではなく、キロバイト単位で出力されます。

-sフラグは、最上位ディレクトリ(デフォルトでは現在のディレクトリ、またはコマンドラインで指定されたディレクトリ)にあるもののみを一覧表示します。これに関して、duがlsと逆の動作をするのは奇妙です。デフォルトでは、duは各サブディレクトリのディスク使用量を再帰的に提供します。対照的に、lsは指定されたディレクトリ内のリストファイルのみを提供します。(ls -Rは再帰的な動作を提供します。)


ルートディレクトリでこれを試してみましたが、それでもサブディレクトリをリストしようとするため、多くのメッセージが表示されます。
Nagev 2017年

14

このシェル関数宣言をシェル初期化スクリプトに入れます。

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

私はそれを呼ばれduls、それは両方からの出力を示しているためduls(そのために):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

説明:

pasteユーティリティは、あなたがそれを与えることを仕様に応じてその入力から列を作成します。2つの入力ファイルが与えられると、タブとしてセパレーターを使用してそれらを並べて配置します。

我々はそれをの出力与えるdu -hs -- "$@" | cut -f1最初のファイル(実際には入力ストリーム)などとの出力をls -ld -- "$@"としての 2番目のファイルとしてのます。

関数では、 "$@"は、すべてが二重引用符で囲まれたすべてのコマンドライン引数のリストに評価されます。したがって、グロブ文字やスペースを含むパス名などを理解します。

二重マイナス記号(--)は、コマンドラインオプションの終わりをduおよびに示しlsます。これらがなければ、言うduls -lことは混乱しdu、そのためのオプションは混乱dulsませんls(そして、両方のユーティリティに存在するオプションは同じことを意味しない可能性があり、かなり混乱します)。

cut後にdu単にの最初の列切り出すdu -hs出力(サイズ)。

du出力を左側に置くことにしました。それ以外の場合は、(ファイル名の長さが異なるため)ぐらついた右側の列を管理する必要があったでしょう。

コマンドはコマンドラインフラグを受け入れません。

これはとの両方bashでテストされていksh93ます。では動作しません/bin/sh


それはすばらしい。アクセス権 1本のライン上のサイズ
ベン

7

代わりにdu -sk-kファイルサイズをキロバイトで示すフラグ)を常に使用します。


5
これはコメントであるべきで、@ molfによるより正確でよりよく説明された承認済みの回答に追加情報を提供します。それ自体で答えと見なすべきではありません
code_monk


7

ncdu ncurses du

この素晴らしいCLIユーティリティを使用すると、大きなファイルとディレクトリをインタラクティブに簡単に見つけることができます。

たとえば、よく知られているプロジェクトのツリー内から、次のことを行います。

sudo apt-get install ncdu
ncdu

結果は次のとおりです。

ここに画像の説明を入力してください

次に、キーボードの右下を押して/driversフォルダに移動すると、次のように表示されます。

ここに画像の説明を入力してください

ncdu 起動時にツリー全体のファイルサイズを再帰的に計算するだけなので、効率的です。

「ディスク使用量の合計」と「見かけのサイズ」はに似ていますdu。私はそれについて説明しました。なぜ「du」の出力が「du -b」と非常に異なることが多いのですか

プロジェクトのホームページ:https : //dev.yorhel.nl/ncdu

関連する質問:

Ubuntu 16.04でテスト済み。

ncdu 非インタラクティブな使用

のもう一つのクールな機能 ncduは、最初にサイズをJSON形式でダンプし、後で再利用できることです。

たとえば、ファイルを生成するには、次のコマンドを実行します。

ncdu -o ncdu.json

そしてそれをインタラクティブに調べます:

ncdu -f ncdu.json

これは、NFSのような非常に大きくて遅いファイルシステムを扱っている場合に非常に役立ちます。

この方法では、最初に一度だけエクスポートすることができます。これには数時間かかる場合があります。次に、ファイルを探索し、終了して、もう一度探索します。

出力フォーマットは単なるJSONなので、他のプログラムでも簡単に再利用できます。例:

ncdu -o -  | python -m json.tool | less

単純なディレクトリツリーのデータ構造を明らかにします。

[
    1,
    0,
    {
        "progname": "ncdu",
        "progver": "1.12",
        "timestamp": 1562151680
    },
    [
        {
            "asize": 4096,
            "dev": 2065,
            "dsize": 4096,
            "ino": 9838037,
            "name": "/work/linux-kernel-module-cheat/submodules/linux"
        },
        {
            "asize": 1513,
            "dsize": 4096,
            "ino": 9856660,
            "name": "Kbuild"
        },
        [
            {
                "asize": 4096,
                "dsize": 4096,
                "ino": 10101519,
                "name": "net"
            },
            [
                {
                    "asize": 4096,
                    "dsize": 4096,
                    "ino": 11417591,
                    "name": "l2tp"
                },
                {
                    "asize": 48173,
                    "dsize": 49152,
                    "ino": 11418744,
                    "name": "l2tp_core.c"
                },

Ubuntu 18.04でテスト済み。


1
すごい。共有してくれてありがとう!
フランクフー

私は同意します、ncduが進むべき道です...しかし、JSONファイルを検索することが可能かどうか知っていますか?つまり、特定のファイル/フォルダーの完全パスを取得します。
FGV

1
@FGV ncduはそれを出力できないと思います。1つの可能性は、JSONを解析する単純なpythonスクリプトをハッキングすることです。
Ciro Santilli冠状病毒审查六四事件法轮功


4

これは私が好きなものです

update:現在のディレクトリにあるファイルを表示せず、ディレクトリのみを一覧表示するため、前のものは気に入らなかった。

/varubuntuの出力例:

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var

3

これらはすべて素晴らしい提案ですが、私が使用するものは次のとおりです。

du -ksh * | sort -n -r

-ksh ファイルとフォルダが人間が読める形式で、メガバイト、キロバイトなどでリストされていることを確認します。次に数値で並べ替え、並べ替えを逆にして、大きいものから順に並べます。

このコマンドの唯一の欠点は、コンピューターがギガバイトがメガバイトより大きいことを認識しないため、数値で並べ替えるだけであり、多くの場合、次のようなリストが表示されます。

120K
12M
4G

ユニットを注意深く見てください。

このコマンドはMacでも機能します(sort -hたとえば、機能しません)。


コマンド-hからフラグを削除すると、duその欠点が減ります
Carlos Ricardo

または、並べ替えの-h代わりに使用することもできます-n
Sebi

または、grep Gにパイプするだけ
gforce89

3
du -S

ドゥは、別の便利なオプションがあります -S, --separate-dirs伝えるデュないサブディレクトリのサイズを含め-いくつかの場面で便利に。

例1- ディレクトリ内のファイルサイズのみを表示します。

du -Sh  * 
3,1G    10/CR2
280M    10

例2-ディレクトリ内のファイルサイズとサブディレクトリを表示します。

du -h  * 
3,1G    10/CR2 
3,4G    10



2

ファイルのサイズを比較する場合は、警告のみです。duは、ファイルシステム、ブロックサイズなどによって異なる結果を生成します。

ファイルのサイズが異なる場合があります。たとえば、ローカルハードディスク上の同じディレクトリとUSB大容量ストレージデバイスを比較します。次のスクリプトを使用します。lsを含めて、ディレクトリサイズを合計します。すべてのサブディレクトリを考慮に入れたバイト単位の結果。

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"

1

現在のディレクトリのファイルとサブディレクトリのサイズを再帰的に表示するには:

du -h .

同じサイズの情報を表示するが、サブディレクトリを再帰的に印刷しないで(巨大なリストになる場合があります)、-max-depthオプションを使用します。

du -h --max-depth=1 .

1

しばらくの間、rmbashでコマンドを使用する代わりに、Nautilus(RHEL 6.0のGnomeデスクトップ上)を使用してホームフォルダーのファイルを削除しました。その結果、合計サイズは

du -sh

私が使用したとき、各サブディレクトリのディスク使用量の合計と一致しませんでした

du -sh *

Nautilusが削除されたファイルをTrashフォルダーに送信し、そのフォルダーがdu -sh *コマンドにリストされていないことに気づくのにしばらく時間がかかりました。だから、誰かが同じ問題に直面した場合に備えて、これを共有したかっただけです。


1

うーん、最善の方法はこのコマンドを使うことです:

du -h -x / | sort -hr >> /home/log_size.txt

その後、すべてのサーバーですべてのサイズのフォルダーを取得できます。最大のサイズを見つけるのに役立ちます。


1

以下は覚えやすい

ls -ltrapR

ディレクトリの内容を一覧表示する

-l長いリスト形式を使用します

-t変更時刻でソートします。新しいものが最初です

-r、-並べ替え中に逆の順序

-a、--allで始まるエントリを無視しません。

-p、-indicator-style = slashディレクトリに追加/インジケーター

-R、--recursiveサブディレクトリを再帰的にリストします

https://explainshell.com/explain?cmd=ls+-ltrapR


1

sizeディレクトリを一覧表示したいものをさらに制御したい場合は、次のようにthreshold-t)スイッチを使用できます。

$ du -ht 1000000000 | sort --reverse

du- dISKのuセージ
h -人間が読める形式
t -しきい値サイズ

ここでは、サイズが1GBを超えるすべてのディレクトリを一覧表示します。

$ du -ht 1G | sort --reverse

説明

wikiで説明されているユニットは次のとおりです。

K、M、G、T、P、E、Z、Y(1024の累乗)または
KB、MB、GB、TB、PB、EB、ZB、YB(1000の累乗)。


0

Martin Wildeが説明したのと同様の問題に遭遇しました。私の場合、rsyncでミラーリングした後、2つの異なるサーバー上の同じディレクトリを比較しました。

スクリプトを使用する代わりに、バイト単位でサイズをカウントする-bフラグにフラグを追加しました。duこれにより、2つのサーバーの違いを排除できると判断しました。引き続き使用-s -hして、包括的な出力を取得できます。


0

.bashrcなどのinitスクリプトに配置します。必要に応じてdefを調整します。

duh() {
  # shows disk utilization for a path and depth level
  path="${1:-$PWD}"
  level="${2:-0}"
  du "$path" -h --max-depth="$level"
}

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