Is it possible to view this output sorted with titlepage_1.pdf before titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf

5 Answers 5


Use the switch -v [natural sort of (version) numbers within text]

ls -v

If you want single column use

ls -1v

The output is sorted. According to the ls manpage:

Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

But if you want to go further, you have at least two options:

Option 1 - ls sort switches

man ls tells you about a number of switches you can use to sort, specifically, the ls man page says:

none (-U), size (-S), time (-t), version (-v), extension (-X)

In your case, you want "version" sort (-v). Be careful, though, since this will also sort anything that has a blahblah-X.Y.Z-A arrangement which may not be entirely what you want. See also GNU's explanation of version sort.

Option 2 - Pipes to sorting commands

You could use a pipe | to send the output to another command, for example the command sort which you could use to sort in a number of other ways, as in ls -1 | sort -n which is useful if you have numbered files. The -1 switch ensures that the output is one-line-per-file.

Equally, you can manipulate the output to aid with sorting by using things like sed or awk.

There are plenty of ways to answer this sort of* question. You may find a linux shell tutorial helpful.

*(See what I did there? :-p)


As already pointed out in a comment, the output is already sorted, but by characters, not numbers. You may want to pipe the output of ls through sort which has a switch to sort by numbers within strings:

ls | sort --version-sort

From the manpage:

-V, --version-sort
         natural sort of (version) numbers within text

Downside: When we issue ls then it outputs the files in a table with as many columns as fit on the current screen (just like you showed in your post). But when ls notices that its output is redirected to a file or to a pipe (as in ls | sort) then ls prints the files in just one column because it then assumes the output is to be processed line-by-line (aka file-by-file) by some other program (like sort). So the output of ls | sort -V will be in one column instead of in a table with multiple columns. See @vijay's simple but perfect answer for how to avoid that.

  • 1
    You could also pipe the output to column Oct 7, 2018 at 21:14

ls -l : lists files of the directory vertically but not in a particular order.

ls -l | sort -k 3 : -k 3 would sort the output of the previous command by the 3rd column.


Please try this.

ls -ltrh --sort=size

Sample output

$ ls -ltrh --sort=size
total 13M
drwxr-xr-x 1 tayyab.sarfraz 1049089    0 Nov 11 14:26  ZZZZZ3309669667/
drwxr-xr-x 1 tayyab.sarfraz 1049089    0 Nov 11 14:26  ZZZZZ1036987434/
-rw-r--r-- 1 tayyab.sarfraz 1049089  504 Jun 10 17:11  desktop.ini
-rw-r--r-- 1 tayyab.sarfraz 1049089 1021 Oct 30 13:02  jZHcYAg3964781410.txt
-rw-r--r-- 1 tayyab.sarfraz 1049089 1021 Oct 30 13:02  jZHcYAg3531170004.txt
-rw-r--r-- 1 tayyab.sarfraz 1049089 2.0K Oct 18 13:06  ZZZZZ596653076.doc
-rw-r--r-- 1 tayyab.sarfraz 1049089 2.0K Oct 18 13:06  ZZZZZ2113390587.doc
-rw-r--r-- 1 tayyab.sarfraz 1049089 4.0K Oct 26 12:35 '!!!!!3048223661.pem'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.