1. Overview
As Linux users, we frequently interact with the file systems. One of the common tasks is to list the files and sort them according to their size.
In this tutorial, we’ll discuss the various ways to achieve this.
2. Using the du and sort Commands
Let’s create a set of files and directories to use as an example:
$ mkdir dir1 dir2
$ fallocate -l 850K dir1/file1.dat
$ fallocate -l 450M dir2/file2.dat
$ fallocate -l 750M dir1/file3.dat
$ fallocate -l 1.2G file4.dat
Let’s now look at the directory tree we just created:
$ tree -h
.
├── [4.0K] dir1
│ ├── [850K] file1.dat
│ └── [750M] file3.dat
├── [4.0K] dir2
│ └── [450M] file2.dat
└── [1.2G] file4.dat
2 directories, 4 files
We can use du and sort commands to list and sort files according to their size:
$ du -ah --max-depth=1 | sort -h
451M ./dir2
751M ./dir1
1.2G ./file4.dat
2.4G .
Let’s see the options we used for the du command:
- -a: reports size of all files and not just of directories
- -h: reports size in human-readable formats like Kilobytes (K), Megabytes (M), Gigabytes (G), and so on
- –max-depth: reports total size for the first-level directories
We can use the -r option on the sort command to generate the output in descending order.
Also note that this approach is only suitable if we want to sort entire directories by size, not just individual files.
3. Using the ls and sort Commands
We can use a combination of ls, grep, and sort commands to list and sort files according to their size:
$ ls -lhR | grep '^-' | sort -k 5 -h
-rw-r--r-- 1 jarvis jarvis 850K Apr 12 21:47 file1.dat
-rw-r--r-- 1 jarvis jarvis 450M Apr 12 21:47 file2.dat
-rw-r--r-- 1 jarvis jarvis 750M Apr 12 21:47 file3.dat
-rw-r--r-- 1 jarvis jarvis 1.2G Apr 12 21:47 file4.dat
In the above example, the grep ‘^-‘ command excludes directories from the output.
Let’s now see the options we used for ls:
- -l: uses a long listing format. The file size is shown in the fifth column
- -h: reports size in a human-readable format like Kilobytes (K), Megabytes (M), Gigabytes (G), and so on
- -R: recurs through the sub-directories
And for the sort command, we used:
- -k: performs the sort using a key. In this example, the fifth column is used as the sort key
4. Using the find and sort Commands
Finally, we can use a combination of find and sort commands to list and sort files according to their size:
$ find . -type f -ls | sort -n -k7
2752740 852 -rw-r--r-- 1 jarvis jarvis 870400 Apr 12 21:47 ./dir1/file1.dat
2752741 460804 -rw-r--r-- 1 jarvis jarvis 471859200 Apr 12 21:47 ./dir2/file2.dat
2752742 768004 -rw-r--r-- 1 jarvis jarvis 786432000 Apr 12 21:47 ./dir1/file3.dat
2752743 1253380 -rw-r--r-- 1 jarvis jarvis 1283457024 Apr 12 21:47 ./file4.dat
Let’s have a look at the find command options we used:
- -type f -ls: uses a long listing format of ls command for each file. The size of a file is shown in the seventh column.
And for the sort command, we used:
- -n -k7: sorts files in ascending order according to their size. In this example, we use the seventh column as a sort key
5. Conclusion
In this tutorial, we discussed three practical methods for listing and sorting files according to their size. The commands showed in this tutorial can be used in day-to-day life while working with the Linux system.