web-dev-qa-db-ja.com

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

Unixでlsを使ってサブディレクトリの合計サイズとそのすべての内容を一覧表示することは可能ですか(通常は4Kはディレクトリファイルそのものである)。 I.E.

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

Manページを調べた後、私は空になってきました。

715
kmorris511

次のようにしてください。

du -sh *

のショートバージョン:

du --summary --human-readable *

説明:

du _ d _ 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)

1345
molf

du -sk * | sort -nはフォルダをサイズ順に並べ替えます。スペースを確保するのに役立ちます。

288
GraveDigger
du -sh * | sort -h

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

91
user2969885

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

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

読みやすくするために便利です。

41
Jay Chakra

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
23
Sebi

あなたが望むコマンドは 'du -sk' du = "disk usage"です。

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

-sフラグはトップレベルディレクトリ(デフォルトではカレントディレクトリ、またはコマンドラインで指定されたディレクトリ)内のものだけをリストします。この点でduがlsと反対の動作をすることは奇妙です。デフォルトではduは再帰的に各サブディレクトリのディスク使用量を表示します。対照的に、lsは指定されたディレクトリのリストファイルだけを与えます。 (ls -Rは再帰的な振る舞いをします。)

20
Keith Smith

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

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

dulsduの両方からの出力を(この順序で)表示するので、lsと呼びました。

$ 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の出力を、2番目のファイルとしてls -ld -- "$@"の出力を渡します。

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

二重マイナス(--)は、コマンドラインオプションの終わりをdulsに知らせます。これらがなければ、duls -lduを混同し、dulsが持っていないオプションはlsを混同するでしょう(そして両方のユーティリティに存在するオプションは同じことを意味しないかもしれません、そしてそれはかなり混乱でしょう)。

cutの後のduは単にdu -hs出力の最初の列(サイズ)を切り取るだけです。

私はduの出力を左側に置くことにしました。そうでなければ、(ファイル名の長さが異なるため)揺らぎのある右側の列を管理する必要がありました。

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

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

11
Kusalananda
du -h --max-depth=1 . | sort -n -r
7
StarDust

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

7
Crenshaw

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

update :現在のディレクトリのファイルを表示せず、ディレクトリのみを一覧表示するので、前のものは好きではありませんでした。

Ubuntuの/varの出力例:

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
4
meffect

同じディレクトリ内のdu -sch *。

4
John
du -S

du には別の便利なオプションがあります: du にサブディレクトリのサイズを含めないように指示する-S, --separate-dirs - 場合によっては便利です。

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

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

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

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

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

du -ksh * | sort -n -r

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

このコマンドの唯一の欠点は、ギガバイトがメガバイトより大きいことをコンピュータが認識していないため、番号順に並べ替えられるだけで、次のようなリストが見つかることです。

120K
12M
4G

ユニットをよく見てください。

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

3
kakubei

そのためのduコマンドを見てください

3
zappan

du -sm * | sort -nr

サイズで出力

3
Amir

ファイルのサイズを比較したい場合は、単なる警告です。 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"
2
Martin Wilde

ncdu ncurses du

この素晴らしいCLIユーティリティを使えば、大きなファイルやディレクトリを対話的に簡単に見つけることができます。

たとえば、 よく知られているプロジェクトのツリーの内側から

Sudo apt-get install ncdu
ncdu

その結果は以下のとおりです。

enter image description here

それから、私はキーボードの上下左右に入って/driversフォルダに入ると、次のようになります。

enter image description here

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

「総ディスク使用量」対「見かけのサイズ」はduに似ています、そして私はそれを以下で説明しました: なぜ `du`の出力はしばしば` du -b`と違うのですか

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

関連する質問

Ubuntu 16.04でテスト済み。

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

du -h .

同じサイズ情報 but なしを表示してそれらのサブディレクトリを再帰的に表示する(これは巨大なリストになる可能性があります)には、 --max-depth オプションを使用します。

du -h --max-depth=1 .
1
Pascal

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

du -sh

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

du -sh *

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

1
CrossEntropy

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

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

その後、あなたはあなたのすべてのサーバー上のすべてのサイズのフォルダーを取得することができるでしょう。最大のサイズを見つけるためにあなたに役立つのは簡単です。

1
Xanarus

以下は覚えやすいです

ls -ltrapR

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

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

-t変更時刻順に並べ替えます。最新のものが最初です。

ソート中に-r、 - reverseの順序を逆にする

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

-p、--indicator-style =ディレクトリにスラッシュを追加/表示する

-R、 - recursive listサブディレクトリを再帰的に

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

0
Cryptopat

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

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

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

$ du -ht 1000000000 | sort --reverse

du - disk usage
h - 人間が読める形式
t - しきい値サイズ

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

$ du -ht 1G | sort --reverse

説明

に記述されている単位 続く:

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

0
kmario23

私の場合は、rsyncを使ってミラーリングした後、2つの異なるサーバー上の同じディレクトリを比較しました。

スクリプトを使用する代わりに、サイズをバイト単位で数えるdu-bフラグを追加し、2つのサーバーの違いを排除できると判断した範囲で判断しました。わかりやすい出力を得るために-s -hを使うことができます。

0
booltype