How can I sort the output of ls
by last modified date?
10 Answers
ls -t
or (for reverse, most recent at bottom):
ls -tr
The ls
man page describes this in more details, and lists other options.

- 56,503
- 27
- 182
- 256

- 19,989
- 1
- 15
- 12
-
376`ls -halt` is for `human readable`, `show hidden`, `print details`, `sort by date`. – Evgeni Sergeev Oct 01 '13 at 05:24
-
10In case anyone's wondering, both the `-t` and `-r` arguments are specified in [the section about `ls` in the POSIX standard](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html), so should be compatible across Unices. – Mark Amery Oct 27 '15 at 12:09
-
9
-
1
-
5
-
-
12@EvgeniSergeev DONT MEMORISE `ls -halt` a simple mistype may cause your server to crash! https://linux.die.net/man/8/halt – Isaac Jul 09 '17 at 21:43
-
1@Isaac: for a regular user `halt` is not gonna work without `sudo` unless explicitly configured. – ccpizza Sep 02 '19 at 15:19
-
2
-
1
-
Try this: ls -ltr
. It will give you the recent to the end of the list

- 494
- 7
- 15

- 1,911
- 1
- 6
- 3
-
I used this to get the list of files in my Git repository by their last edit date. `ls -alt $(git ls-files -m)` Thanks! – NobleUplift Aug 14 '19 at 22:07
For a complete answer here is what I use: ls -lrth
Put this in your startup script /etc/bashrc
and assign an alias like this: alias l='ls -lrth'
Restart your terminal and you should be able to type l
and see a long list of files.

- 991
- 1
- 10
- 20
-
15You can also call `source /etc/bashrc` if you want to add it to your repertoire while running. – cwallenpoole Feb 11 '15 at 07:57
-
1You can also add it in `~/.bash_aliases` just for your user (one can create the file if it doesn't exist already – Dinei Apr 24 '18 at 01:23
I use sometime this:
find . -type f -mmin -5 -print0 | xargs -0 /bin/ls -tr
or
find . -type f -mmin -5 -print0 | xargs -0 /bin/ls -ltr
to look recursively about which files was modified in last 5 minutes.
... or now, with recent version of GNU find:
find . -type f -mmin -5 -exec ls -ltr {} +
... and even for not limiting to files:
find . -mmin -5 -exec ls -ltrd {} +
(note the -d
switch to ls
for not displaying content of directories)
More robust way?
Have a look at my anser to find and sort by date modified

- 1,735
- 15
- 17
-
By recursively you mean it lists all files in subdirectories, doesn't ls already have a switch to do that? – jiggunjer May 14 '15 at 16:28
-
@jiggunjer `ls -Rltr` will sort by dir, then by dates, `find -type f -mmin -5 -exec ls -ltr {} +` will just print files modified in last 5 minutes, sorted by date, regardless of directory tree! – F. Hauri - Give Up GitHub Dec 07 '16 at 18:08
-
Note that this won't work if the list of files is too long to be passed as one shell invocation to `ls` (https://unix.stackexchange.com/a/118200/27186) – then you'll see one sorted bunch of files, then another sorted bunch of files, etc. but the whole list won't be sorted. See https://superuser.com/questions/294161/unix-linux-find-and-sort-by-date-modified for sorting longer lists with find. – unhammer Sep 11 '19 at 07:21
-
@unhammer You're right, for this to work safely, see [my recent anser to Unix/Linux find and sort by date modified](https://superuser.com/a/1481352/178656) – F. Hauri - Give Up GitHub Sep 11 '19 at 08:25
Mnemonic
For don't ignore entries starting with .
and sort by date (newest first):
ls -at
For don't ignore entries starting with .
and reverse sort by date (oldest first):
ls -art
For don't ignore entries starting with .
, use a long listing format and sort by date (newest first):
ls -alt
For print human readable sizes, don't ignore entries starting with .
, use a long listing format and sort by date (newest first) (@EvgeniSergeev note):
ls -halt
but be careful with the last one, because a simple mistype can cause a server crash... (@Isaac note)

- 657
- 7
- 14
Find all files on the file system that were modified maximally 3 * 24 hours (3 days) ago till now:
find / -ctime 3

- 11,880
- 23
- 69
- 90

- 2,397
- 1
- 19
- 23
To show 10 most recent sorted by date, I use something like this:
ls -t ~/Downloads | head -10
or to show oldest
ls -tr ~/Downloads | tail -10

- 353
- 4
- 10
-
1it giv`ls -t head -2` and `ls -tr | tail -2` gives same result, option (-t/-tr) should be kept fixed and modified the tail/head or vice verse, modifing both is like modyfing nothing – DDS Jun 27 '18 at 16:09
-
1Did you see the comment above? Indeed, one should use `head` in both commands (to change the sort order too), or use `ls -t` in both commands (which would always sort descending by date). – Arjan Feb 28 '20 at 11:15
Using only very basic Unix commands:
ls -nl | sort -k 8,8n -k 6,6M
This worked on Linux; column 8 is "n" (numeric), column 6 is "M", month.
I'm new at sort
, so this answer could probably be improved. Not to mention, it needs additional options to ls
and sort
to use exact timestamps, but not everyone will need this.

- 11,880
- 23
- 69
- 90

- 306
- 3
- 9
-
6I suspect your answer hasn't gotten any up-votes because it parses the output of ls - see [the canonical argument against doing so](http://mywiki.wooledge.org/ParsingLs) and [this question about not parsing ls](http://unix.stackexchange.com/questions/128985/why-not-parse-ls) – Eponymous Dec 15 '14 at 22:32
One possible way of showing for example last 10 modified files is following command:
ls -lrth | tail -n 10
Description of above command:
ls - list
arguments:
l - long
r - reverse
t - sort by time
h - human readable
then it's piped to tail
command, which shows
only 10 recent lines, defined by n parameter (number of lines)...

- 619
- 6
- 10