Linux ls Command Sort Files By Size

See all GNU/Linux related FAQ
How do I sort all *.avi or *.py files in $HOME/Download/ directory by file size using Linux ls command line utility? How do I list all files ordered by size in Linux using ls command?

The ls command is used to list directory contents under Linux and Unix like operating systems. If no options or operands are given, the contents of the current directory are displayed on the screen. By default entries are sorted alphabetically if none of the -cftuvSUX nor --sort option passed to the ls command. Let us see how to use the ls command to sort files by size on Linux and Unix-like systems such as FreeBSD.
Tutorial details
Difficulty level Easy
Root privileges No
Requirements Linux terminal
Category Terminal/ssh
Prerequisites ls command
OS compatibility AlmaLinux Alpine Arch CentOS Debian Fedora Linux Mint openSUSE Pop!_OS RHEL Rocky Stream SUSE Ubuntu WSL
Est. reading time 3 minutes
Advertisement

The default output (sort by alphabetically)

Type the following command:
$ ls
$ ls *.py
$ ls *.avi

Fig.01: ls Command Output

Fig.01: ls Command Output

Linux force sort by size option

You need to pass the -S or --sort=size option as follows to Linux or Unix command line:
$ ls -S
$ ls -S -l
$ ls --sort=size -l
$ ls --sort=size *.avi
$ ls -S -l *.avi

Sample outputs:

Fig.02: Sort files / folders (directories) by size

Fig.02: Sort files / folders (directories) by size

You will see largest file first before sorting the operands in lexicographical order. The following command will sort file size in reverse order:
$ ls -l -S | sort -k 5 -n
OR try (see comments below, thanks!):
$ ls -lSr
Fig.03: Ls Command Sort By Size in Reverse (Lowest First) Order

Fig.03: Ls Command Sort By Size in Reverse (Lowest First) Order

Sort output and print sizes in human readable format (e.g., 1K 234M 2G)

Pass the -h option to the ls command as follows:
$ ls -lSh
$ ls -l -S -h *.avi
$ ls -l -S -h ~/Downloads/*.mp4 | more

Sorting ls command output by file size on Linux

Run the following ls command:
$ ls -Slh
OR
$ ls -Slhr

ls Command Sort Files By Size Command Options

Table 1: ls command options to list all files ordered by size
Option Description
-l Long listing
-S Sort by file size, largest first
--sort=size sort by size instead of file name(s)
-r Reverse order while sorting
-h Human readable output. with -l and -s option, print sizes like 1K 234M 2G etc.

How to exclude directories when all files ordered by size

Try filtering outputs of ls command using grep command:
$ ls -lS | grep -v '^d'
$ ls -Slh | grep -v '^d'
$ ls -Slhr | grep -v '^d'

Here is what I see:

total 289836
-rw-rw-r--.  1 vivek vivek 295599646 Jun  9  2018 lnxpcs-master.zip
-rw-rw-r--.  1 vivek vivek    501221 Dec 27 15:49 top.cvs
-rw-r--r--.  1 vivek vivek    270466 Jan 30  2018 out
-rw-------.  1 vivek vivek    124866 Aug 13 12:38 Receipt Details.pdf
-rwxr-xr-x.  1 vivek vivek     47441 Nov 18  2017 speedtest-cli
-rw-r--r--.  1 vivek vivek     19419 Feb  9  2018 final.txt
-rw-r--r--.  1 vivek vivek     13654 Jan 13 17:09 updated.txt
-rw-r--r--.  1 vivek vivek      8247 Aug 14 09:23 nixcraft.conf
-rw-r--r--.  1 vivek vivek      5083 Jan  8 00:58 wanted.txt
-rw-r--r--.  1 vivek vivek      2674 Jan  3 02:47 vpn.config.ovpn
-rw-rw-r--.  1 vivek vivek      1539 Jun  8  2018 email-ids.txt

One can use find command as well along with sort command to just list dir size in sorted order:
$ find . -type d -ls | sort -n -r
Or just list files and exclude all dirs when sorting:
$ find . -type f -ls | sort -n -r
Here is what I see:

1619988315      0 drwxr-xr-x   2  vivek    vivek         164 Dec 20 15:24 ./images/password-change
1619988314      0 drwxr-xr-x   2  vivek    vivek          84 Nov  7 16:26 ./images/dig-not-found
1619988310      0 drwxr-xr-x   2  vivek    vivek         106 Sep 21 00:34 ./pfsense/fw0.nixcraft.lan
1615242013      0 drwxr-xr-x   2  vivek    vivek          83 Jun 19  2018 ./hello-web-app/pdf
1615241993      0 drwxr-xr-x   2  vivek    vivek         156 Feb  8  2018 ./books/ssh/ssh2\ twp\ 3\ formats\ 2018-02-07

Conclusion

This page showed how to list all files ordered by size in Linux or Unix like systems. See ls command man page for more information or read it offline using the help command or man command:
$ man ls
$ ls --help

A note about macOS and FreeBSD visitors

Please note that macOS and FreeBSD users pass the -S to the ls command to “Sort by size” (largest file first) before sorting the operands in lexicographical order. For example:
$ ls -S
$ ls -S -l
$ ls -Sl | more
$ ls -Sl | grep 'some_file_name'

🥺 Was this helpful? Please add a comment to show your appreciation or feedback.

nixCrat Tux Pixel Penguin
Hi! 🤠
I'm Vivek Gite, and I write about Linux, macOS, Unix, IT, programming, infosec, and open source. Subscribe to my RSS feed or email newsletter for updates.

31 comments… add one
  • foo May 8, 2014 @ 23:35

    seriously, fix your “-s” typo or stop being the top hit on google :P

    • Nix Craft May 9, 2014 @ 5:03

      @foo and rest: Sorry about that :( The faq has been updated.

  • noob May 27, 2014 @ 16:31

    % ls -S
    ls: illegal option — S
    usage: ls -1RaAdCxmnlhogrtuvVcpFbqisfHLeE@ [files]

    • dru May 28, 2014 @ 13:26

      That’s more than likely Solaris. However, if you have coreutils installed you can do ‘gls -S’ ;-)

  • E. Pluribus Dickhead Sep 30, 2014 @ 19:12

    The one thing I find most annoying about Linux “ls” is the fact that it (at least on Ubuntu) it sorts things in alphabetical order, no matter if it’s a dot file, or capitalized, or whatever. This highly offends my BSD-like sensibilities and makes me think linux “ls” belongs to DOS.

    Is there a way to make it stop this vile and pernicous behavior? ;)

    • dru Oct 1, 2014 @ 4:50

      Don’t have a Linux box right now to test but I think you’re looking for this:
      alias lsdot='LC_COLLATE=C ls -alF'
      lsdot

      • E. Pluribus Dickhead Oct 1, 2014 @ 19:44

        Cool — I’ll check it out.

    • Gaurav Khurana Feb 16, 2015 @ 14:33

      i think you may alias it

      alias ‘ls=ls -lrt’ and put this instrcutionion into your .profile so that everytime you open a session ls will get replaced by ls -lrt

  • Rihab Jan 8, 2016 @ 10:16

    I also like this one:
    *) ls –sort=size -sh

  • m0ZamBiQki Jan 22, 2016 @ 12:21

    no option for -S in SunOS 5.10 sun4v sparc
    $ ls -lSr
    ls: illegal option -- S

    neither the below:
    $ ls --sort=size -l
    ls: illegal option -- sort=size

    • Chandan Kumar Naik Mar 2, 2021 @ 11:33

      These commands only work on Linux and macOS/FreeBSD etc. You are using really older version of Unix. See man page

      man ls
  • Rooney Apr 14, 2021 @ 1:26

    Thank you. Your article help me on macOS.

  • Anonymous Jun 18, 2021 @ 15:50

    Hi Vivek,
    Thanks for the article – I found the command where you exclude directories via `grep -v ‘^d’` super useful here ; I did not understand how to exclude a PWD’s directories until I saw the usage of this control character in the beginning of a long listing ( since they are listed with this interesting drwxrwxrwx esque format )!

  • Anonymous Jul 6, 2022 @ 20:49

    Thanks, it’s helpful

  • Richard Clark Feb 27, 2023 @ 9:39

    Thanks for posting, I’m sorted and could not have done it without you!

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Your comment will appear only after approval by the site admin.