How to get the size of a directory in Linux

Many times do you want to know the size of a directory. The most common Linux command is du.

We will list some examples. At the end of the post, you can see the du syntax.

– get the size of a specific directory/file

root@web [~]# du -sh path-to-directory-or-file/
root@web [~]# du -sh public_html
8.0K    public_html
root@web [~]#

– get the size of the current directory

root@web [~]# du -sh
root@web [~]# du -sh
37M     .
root@web [~]#

– get the size for files and folders in the current directory; or you can choose the depth=2,3 etc

root@web [~]# du -ah --max-depth=1
root@web [~]# du -ah --max-depth=1
4.0K    ./.libnet-openssh-perl
4.0K    ./.rnd
4.0K    ./.lesshst
44K     ./.bwusage.sqlite
40K     ./php.ini.orig
4.0K    ./perl5
4.0K    ./out
588K    ./support
388K    ./.cpanm
4.0K    ./error_log
4.0K    ./.accesshash
.....

– get the s size of files and folders with the date they were last modified

root@web [~]# du -ah --max-depth=1 --time
root@web [~]# du -ah --max-depth=1 --time
4.0K    2015-08-25 03:01        ./.libnet-openssh-perl
4.0K    2017-05-27 07:04        ./.rnd
4.0K    2017-05-27 14:37        ./.lesshst
44K     2016-01-04 01:15        ./.bwusage.sqlite
40K     2016-08-09 05:00        ./php.ini.orig
4.0K    2015-09-23 13:46        ./perl5
4.0K    2015-11-09 13:47        ./out
588K    2016-12-08 14:21        ./support
388K    2015-09-22 13:37        ./.cpanm
4.0K    2017-03-16 12:53        ./error_log
4.0K    2015-08-24 11:33        ./.accesshash
......

– sort subdirectories by size

root@web [~]#  du -h --max-depth=1 | sort -hr
root@web [~]# du -h --max-depth=1 | sort -hr
37M     .
14M     ./.cpanel
2.2M    ./.spamassassin
2.1M    ./tmp
748K    ./.MirrorSearch
588K    ./support
388K    ./.cpanm
40K     ./.gnupg
20K     ./.cpobjcache
20K     ./.HttpRequest
12K     ./cpanel3-skel
8.0K    ./public_html
8.0K    ./.pki
4.0K    ./public_ftp
4.0K    ./perl5
4.0K    ./.ssh
4.0K    ./.libnet-openssh-perl
root@web [~]#

If you have a lot of files/directories use du | more or du | less commands.

The syntax for the du command is:

root@web [~]# du --help
Usage: du [OPTION]... [FILE]...
  or:  du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
  -0, --null            end each output line with 0 byte rather than newline
  -a, --all             write counts for all files, not just directories
      --apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in ('sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  scale sizes by SIZE before printing them; e.g.,
                           '-BM' prints sizes in units of 1,048,576 bytes;
                           see SIZE format below
  -b, --bytes           equivalent to '--apparent-size --block-size=1'
  -c, --total           produce a grand total
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
  -d, --max-depth=N     print the total for a directory (or file, with --all)
                          only if it is N or fewer levels below the command
                          line argument;  --max-depth=0 is the same as
                          --summarize
      --files0-from=F   summarize disk usage of the
                          NUL-terminated file names specified in file F;
                          if F is -, then read names from standard input
  -H                    equivalent to --dereference-args (-D)
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
      --inodes          list inode usage information instead of block usage
  -k                    like --block-size=1K
  -L, --dereference     dereference all symbolic links
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -S, --separate-dirs   for directories do not include size of subdirectories
      --si              like -h, but use powers of 1000 not 1024
  -s, --summarize       display only a total for each argument
  -t, --threshold=SIZE  exclude entries smaller than SIZE if positive,
                          or entries greater than SIZE if negative
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using STYLE, which can be:
                            full-iso, long-iso, iso, or +FORMAT;
                            FORMAT is interpreted like in 'date'
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -x, --one-file-system    skip directories on different file systems
      --help     display this help and exit
      --version  output version information and exit

Display values are in units of the first available SIZE from --block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

GNU coreutils online help: http://www.gnu.org/software/coreutils/
Report du translation bugs to http://translationproject.org/team/
For complete documentation, run: info coreutils 'du invocation'
root@web [~]#

Leave a Reply