Find The Size Of Files And Directories In Linux With The du Command

29th June 2012 - 6 minutes read time

The du (or 'disk usage') command is a Linux command that can print a list of the files within a directory including their sizes and even summarize this information. It is useful if you want to see how large a group of files is and provides more information about directories than the ls command does.

Using du within a directory will show you the size (in bytes) of all files and directories under that directory, including the size of the current directory. To make du produce more readable results just use the -h flag to make the file sizes into a human readable format. You can also use the -c flag to produce a grand total of all of the sizes found, and the -s flag to display only a total. The -a flag can be used to display all files as well as directories, leave this out to just display directories.

When you use du for the first time on a directory it will take longer than subsequent runs because the results of each size analysis is cached.

Here is a few examples of the du command in action.

Get the size of directories under the current directory, in a human readable format.

$ du -h
2.2M	./directory
2.4M	.

Get the size of all files and directories under the current directory, in a human readable format.

$ du -ha
2.0M	./directory/file5.txt
184K	./directory/file4.txt
2.2M	./directory
4.0K	./script.php
4.0K	./file2.txt
0	./empty.file
4.0K	./file1.txt
184K	./file3.txt
2.4M	.

Display a summary of the size of all files and directories under the current directory.

$ du -s
2420	.

Display a summary of the size of all files and directories under the current directory, in a human readable format.

$ du -sh
2.4M	.

View the size of all files of a particular type, with a total size of the files found.

$ du -cha *.php
4.0K	script.php
4.0K	total

View the size of all files and directories in the current directory, in a human readable format.

$ du -sh *
2.2M	directory
0	empty.file
4.0K	file1.txt
4.0K	file2.txt
184K	file3.txt
4.0K	script.php

View the size of all files and directories in the current directory, along with a total of the sizes found, in a human readable format.

$ du -csh *
2.2M	directory
0	empty.file
4.0K	file1.txt
4.0K	file2.txt
184K	file3.txt
4.0K	script.php
2.4M	total

View the size of all files and directories in the current directory, in a human readable format, and sort the output by size.

$ du -hs * | sort -h
0	empty.file
4.0K	file1.txt
4.0K	file2.txt
4.0K	script.php
184K	file3.txt
2.2M	directory

Here is a list of the available flags for this command. You can see this list on your system by using the --help flag.


  -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
      --files0-from=F   summarise 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)
      --si              like -h, but use powers of 1000 not 1024
  -k                    like --block-size=1K
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -L, --dereference     dereference all symbolic links
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -0, --null            end each output line with 0 byte rather than newline
  -S, --separate-dirs   do not include size of subdirectories
  -s, --summarize       display only a total for each argument
  -x, --one-file-system    skip directories on different file systems
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -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
                          --summarise
      --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 STYLE:
                          full-iso, long-iso, iso, +FORMAT
                          FORMAT is interpreted like `date'
      --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 may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Add new comment

The content of this field is kept private and will not be shown publicly.