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.

  1. $ du -h
  2. 2.2M ./directory
  3. 2.4M .

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

  1. $ du -ha
  2. 2.0M ./directory/file5.txt
  3. 184K ./directory/file4.txt
  4. 2.2M ./directory
  5. 4.0K ./script.php
  6. 4.0K ./file2.txt
  7. 0 ./empty.file
  8. 4.0K ./file1.txt
  9. 184K ./file3.txt
  10. 2.4M .

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

  1. $ du -s
  2. 2420 .

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

  1. $ du -sh
  2. 2.4M .

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

  1. $ du -cha *.php
  2. 4.0K script.php
  3. 4.0K total

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

  1. $ du -sh *
  2. 2.2M directory
  3. 0 empty.file
  4. 4.0K file1.txt
  5. 4.0K file2.txt
  6. 184K file3.txt
  7. 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.

  1. $ du -csh *
  2. 2.2M directory
  3. 0 empty.file
  4. 4.0K file1.txt
  5. 4.0K file2.txt
  6. 184K file3.txt
  7. 4.0K script.php
  8. 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.

  1. $ du -hs * | sort -h
  2. 0 empty.file
  3. 4.0K file1.txt
  4. 4.0K file2.txt
  5. 4.0K script.php
  6. 184K file3.txt
  7. 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.

  1. -a, --all write counts for all files, not just directories
  2. --apparent-size print apparent sizes, rather than disk usage; although
  3. the apparent size is usually smaller, it may be
  4. larger due to holes in (`sparse') files, internal
  5. fragmentation, indirect blocks, and the like
  6. -B, --block-size=SIZE scale sizes by SIZE before printing them. E.g.,
  7. `-BM' prints sizes in units of 1,048,576 bytes.
  8. See SIZE format below.
  9. -b, --bytes equivalent to `--apparent-size --block-size=1'
  10. -c, --total produce a grand total
  11. -D, --dereference-args dereference only symlinks that are listed on the
  12. command line
  13. --files0-from=F summarise disk usage of the NUL-terminated file
  14. names specified in file F;
  15. If F is - then read names from standard input
  16. -H equivalent to --dereference-args (-D)
  17. -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
  18. --si like -h, but use powers of 1000 not 1024
  19. -k like --block-size=1K
  20. -l, --count-links count sizes many times if hard linked
  21. -m like --block-size=1M
  22. -L, --dereference dereference all symbolic links
  23. -P, --no-dereference don't follow any symbolic links (this is the default)
  24. -0, --null end each output line with 0 byte rather than newline
  25. -S, --separate-dirs do not include size of subdirectories
  26. -s, --summarize display only a total for each argument
  27. -x, --one-file-system skip directories on different file systems
  28. -X, --exclude-from=FILE exclude files that match any pattern in FILE
  29. --exclude=PATTERN exclude files that match PATTERN
  30. -d, --max-depth=N print the total for a directory (or file, with --all)
  31. only if it is N or fewer levels below the command
  32. line argument; --max-depth=0 is the same as
  33. --summarise
  34. --time show time of the last modification of any file in the
  35. directory, or any of its subdirectories
  36. --time=WORD show time as WORD instead of modification time:
  37. atime, access, use, ctime or status
  38. --time-style=STYLE show times using style STYLE:
  39. full-iso, long-iso, iso, +FORMAT
  40. FORMAT is interpreted like `date'
  41. --help display this help and exit
  42. --version output version information and exit
  43.  
  44. Display values are in units of the first available SIZE from --block-size,
  45. and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
  46. Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).
  47.  
  48. SIZE may be (or may be an integer optionally followed by) one of following:
  49. 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.