Introduction
In Linux, ls -l
would list the files and directories in a particular path, with their names, dates, and sizes (disk usage). The first thing you'll notice using that command is that the size of directories is always shown as 4096
bytes (or 4,0K if you're using ls -lh
) even though they contain files that are greater than 4 KB in size. The reason is that ls
returns meta-data for the directories, not the actual size.
So what's the shortest and easiest way to get the size of a directory in Linux, you ask? To get the total size of a directory in Linux, you can use the du
(disk-usage) command.
In this article, we'll take a look at some of the most common usages of the du
commands, including but not limited to du -sh
, du -ch
, and du --max-depth
.
Getting Size of Directory in Linux with du
To see the full description and argument list of du
command, refer to the man du
.
If we type du
without any arguments, it will list all the directory names and sizes for the current working directory and all subdirectories recursively:
$ du
2156 ./corpora/state_union
64 ./corpora/names
7624 ./corpora/conll2002
432 ./corpora/toolbox/rotokas
### ...
246984 ./corpora
16792 ./tokenizers/punkt/PY3
36028 ./tokenizers/punkt
49420 ./tokenizers
296408 .
Get Size of the Current Working Directory
To get the size of the current working directory only, and not the subdirectories, we can use du -s
or du --summarize
:
$ du -s
296408 .
We can add the -h
parameter to get the size in a more human-readable format:
$ du -sh
290M .
We can also use du
with $PATH
parameter to get the size of a directory that is located somewhere other than the current working directory:
$ sudo du /var -sh # or "du -sh /var" if you prefer
11G /var
Note that you would need to use it with sudo
privileges for some directories, otherwise you would get a Permission denied
error.
Get Size of First-Level Subdirectories
To get size of first-level subdirectories as well as the total size of the path directory:
$ sudo du /var/* -shc
6,1M /var/backups
144M /var/cache
4,0K /var/crash
7,2G /var/lib
4,0K /var/local
0 /var/lock
3,0G /var/log
4,0K /var/mail
4,0K /var/metrics
4,0K /var/opt
0 /var/run
3,8M /var/snap
52K /var/spool
72K /var/tmp
28K /var/www
11G total
-c
or --total
returns the total size of the path (11G total
). *
lists all the first-level subdirectories in the /var/
directory. We can also add --exclude
to exclude any directory:
$ sudo du /var/* -shc --exclude=lib
6,1M /var/backups
144M /var/cache
4,0K /var/crash
4,0K /var/local
0 /var/lock
3,0G /var/log
4,0K /var/mail
4,0K /var/metrics
4,0K /var/opt
0 /var/run
3,8M /var/snap
52K /var/spool
72K /var/tmp
28K /var/www
3,2G total
Note that excluding lib
also affects the total size (3,2G total
). This is also equivalent of sudo du /var/ -h --exclude=lib --max-depth=1
$ sudo du /var/ -h --exclude=lib --max-depth=1
4,0K /var/mail
52K /var/spool
3,8M /var/snap
4,0K /var/metrics
144M /var/cache
6,1M /var/backups
72K /var/tmp
4,0K /var/crash
3,0G /var/log
4,0K /var/opt
28K /var/www
4,0K /var/local
3,2G /var/
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
--max-depth=N
will return all subdirectory levels that are equal or less than the number N
. Setting --max-depth
to 1
returns the first-level, 2
for the second, and so on.
Get Size of All Subdirectories
To recursively get all subdirectories of /var/
, you can use sudo du /var/ -h
. Or you can pass a number to the --max-depth
that you're sure is greater than or equal to the max level of subdirectory depth: sudo du /var/ -h --max-depth=999
.
The second option is more of a workaround rather than the most efficient way.
Get Size of Directory in Linux with tree --du -h
tree
is a recursive directory listing program that will list directories and files in a tree-like format. Note that tree
is not installed by default. For Debian/Ubuntu, we can install the tree
by running sudo apt install tree
.
After the installation complete, we use the tree
command to list names and sizes of all directories and files in a particular path, in a tree-like format:
$ tree /var/www/ --du -h
/var/www/
├── [4.2K] demosite
│ └── [ 189] index.html
└── [ 15K] html
└── [ 11K] index.html
23K used in 2 directories, 2 files
Conclusion
In this article, we learned how to get directory sizes in Linux. You can use these commands on Linux remote machines, servers, and/or Linux machines with or without GUI.
For most of the cases du
command would be sufficient. It has also the advantage of being installed by default. On the other hand, the tree
command would provide a more visual and detailed user interface to display almost the same results, making it a powerful alternative for du
.