The command you’ll want to use to get the actual size of a directory is du
which is short for “disk usage”. We’ll show you how to use this command.
Getting the Size of a Directory
The du command displays the amount of file space used by the specified files or directories. If the specified path is a directory, du will summarize disk usage of each file and subdirectory in that directory. If no path is specified, du will report the disk usage of the current working directory.
If you run du without any option it will display the disk usage the specified directory and each of its subdirectories in bytes.
In most cases, you would want to display only the space occupied by the directory in a human-readable format. For example, to get the total size of the /var
directory, you would run the following command:
sudo du -sh /var
The output will look something like this.
85G /var
Let’s explain the command and its arguments:
- The command starts with
sudo
because most of the files and directories inside the/var
directory are owned by the root user and are not readable by the regular users. If you omit sudo the du command will print “du: cannot read directory”. s
– Display only the total size of the specified directory, do not display file size totals for subdirectories.h
– Print sizes in a human-readable format (h
)./var
– The path to the directory you want to get the size.
What if you want to display the disk usage of the first-level subdirectories. You have two options, the first one is to use the asterisk symbol as shown below which means “everything that doesn’t start with a period (.
)“. The c
switch tells du to print a grand total of all sizes:
sudo du -shc /var/*
.0G /var/cache
24K /var/db
4.0K /var/empty
4.0K /var/games
77G /var/lib
4.0K /var/local
0 /var/lock
3.3G /var/log
0 /var/mail
4.0K /var/opt
0 /var/run
196K /var/spool
28K /var/tmp
85G total
Another option is to use the --max-depth
switch and specify the subdirectories level:
sudo du -h --max-depth=1 /var
77G /var/lib
24K /var/db
4.0K /var/empty
4.0K /var/local
4.0K /var/opt
196K /var/spool
4.0K /var/games
3.3G /var/log
5.0G /var/cache
28K /var/tmp
85G /var
85G total
By default, the du utility shows the disk space used by the directory or file. The “apparent size” of a file is how much data is actually in the file.
To find the apparent size of a directory use the --apparent-size
switch.
sudo du -sh --apparent-size /var
When you transfer a directory via SCP, Rsync or SFTP the amount of data that will be transferred over the network is the apparent size of the files. This is why the size of space on the disk that is used on the source when displayed with du (without --apparent-size
) will not be the same as the size on the target.
The du command can also be combined with other commands with pipes. For example, to print the 5 largest directories in the /var
directory you would use:
sudo du -h /var/ | sort -rh | head -5
85G /var/
77G /var/lib
75G /var/lib/libvirt/images
75G /var/lib/libvirt
5.0G /var/cache/pacman/pkg
Conclusion
In this tutorial, you learned how to get the size of a directory using the du
command. If you have any question or remark, please leave a comment below.