194

I want a list of the folders from the current directory or one that I specify with their size.

I have tried with du but I only get the size of the directories I specify (du . ./f1), and ls doesn't show the size of the folders.

How do I do this without any scripting ?

kevin
  • 2,184
  • 2
  • 14
  • 12

10 Answers10

291

If you want to show all the directories in the current directory:

$ du -sh */
788K    foo/
500K    bar/
931K    baz/

To show them starting from another directory:

$ du -sh /path/to/dir/*/
48K     /path/to/dir/dir1/
4.0K    /path/to/dir/dir2/
6.7M    /path/to/dir/dir3/
20K     /path/to/dir/dir4/
8.0K    /path/to/dir/dir5/
44K     /path/to/dir/dir6/

If you want to make sure directories with names starting with a dot are included do shopt -s dotglob first.

Dennis Williamson
  • 106,229
  • 19
  • 167
  • 187
24

On a Mac, the --max-depth option is supplanted by -d [depth]. So, to see a human readable listing of your root drive plus 2 levels deep use the following:

du -hd 2 /* 

Note: this command will expose the top two directory levels off your root. This includes traversing one level into your Volumes, and will list the summary sizes of each top-level directory in each of your attached volumes. Depending on what you have attached, this command could take some time to complete.

jadik
  • 349
  • 2
  • 4
20

Another aproach is the --max-depth option.

du -h --max-depth=1 .

Will list all directories and files under the current folder with size.

Depth 2 would list one more level of folders.

matthias krull
  • 2,624
  • 1
  • 20
  • 23
6

Building on the accepted answer, this command will show you the sizes of the folders in the directory, and will also list them by size for you to interpret easier:

$ du -sh */ | sort -rn
Ethan
  • 180
  • 1
  • 5
6

Try:

$ du -s ./f1

or

$ du -sh ./f1

for more friendly readable sizes.

Doug Harris
  • 27,333
  • 17
  • 78
  • 105
4

On Mac, you can install the GNU (Linux) implementation of du with Homebrew (brew install coreutils). Then for example:

gdu folder -shL --exclude=.git

where

  • gdu is the name given to the GNU implementation of du (by default Homebrew does not hide /usr/bin/du);
  • s produces a grand total for the folder specified (omit if you want to see the breakdown);
  • h outputs human-readable sizes;
  • L follows symlinks;
  • --exclude=.git excludes the git directory within the specified folder (this is just an example).

You can ignore more folders by adding --exclude=blah. You can also specify several folders at once (ie gdu folder1 folder2 ...), and in that case, you can combine all the subtotals into a single size using option c.

Jonathan H
  • 161
  • 6
4

I like the following approach:

du -schx .[!.]* * | sort -h

where:

  • s: display only a total for each argument
  • c: produce a grand total
  • h: print sizes in a human-readable format
  • x: skip directories on different file systems
  • .[!.]* *: Summarize disk usage of each file, recursively for directories (including "hidden" ones)
  • | sort -h: Sort based on human-readable numbers (e.g., 2K 1G)
Eduardo Baitello
  • 303
  • 1
  • 10
  • I just needed to add the `-r` to the sort to have it give me it in descending order. – ScottS Jul 17 '23 at 20:34
  • this is the best answer as it takes into account also files in the current folder and not only subfolders. – Sysanin Jul 21 '23 at 08:39
3

Worth to mention the NCurses Disk Usage shell command.

Ncdu is a disk usage analyzer with an ncurses interface. It is designed to find space hogs on a remote server where you don't have an entire graphical setup available, but it is a useful tool even on regular desktop systems. Ncdu aims to be fast, simple and easy to use, and should be able to run in any minimal POSIX-like environment with ncurses installed.

Ray
  • 329
  • 3
  • 3
3

$ du --max-depth=1 /var/www/ | sort -n -r

  • 4
    When adding an answer to an older question with existing answers it is good practice to explain how your answer is different and include some explanation so that it isn't a command only answer. – Jason Aller Jun 30 '15 at 16:41
  • 4
    Can you expand yourt answer to explain what the parameters do? – fixer1234 Jun 30 '15 at 18:59
2

Here is a POSIX script that will work with:

  • A file
  • Files
  • A directory
  • Directories
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Source

Zombo
  • 1
  • 24
  • 120
  • 163