How can I sort the output of ls by last modified date?
-
1Related (not necessarily a duplicate): Unix/Linux find and sort by date modified – Peter Mortensen Dec 27 '16 at 14:15
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.
- 8,328
- 21,009
-
394
ls -haltis forhuman readable,show hidden,print details,sort by date. – Evgeni Sergeev Oct 01 '13 at 05:24 -
12In case anyone's wondering, both the
-tand-rarguments are specified in the section aboutlsin the POSIX standard, so should be compatible across Unices. – Mark Amery Oct 27 '15 at 12:09 -
11
-
1
-
5
-
-
16@EvgeniSergeev DONT MEMORISE
ls -halta 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
haltis not gonna work withoutsudounless explicitly configured. – ccpizza Sep 02 '19 at 15:19 -
3
-
4
-
2
-
i prefer use
ll -ltr, its would print inKfor size of file instead ofbyte– Yogi Arif Widodo Oct 20 '22 at 21:18 -
@Isaac yeah and be very careful because you can also mistype it as
sudo rm -rf /– bfontaine Feb 02 '24 at 16:27
Try this: ls -ltr. It will give you the recent to the end of the list
- 504
- 1,961
-
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.
- 1,031
-
15You can also call
source /etc/bashrcif you want to add it to your repertoire while running. – cwallenpoole Feb 11 '15 at 07:57 -
1You can also add it in
~/.bash_aliasesjust 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 for which files were 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 answer to find and sort by date modified
-
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 -Rltrwill 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 – 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)
- 687
Find all files on the file system that were modified maximally 3 * 24 hours (3 days) ago till now:
find / -ctime 3
- 12,190
- 2,907
- 3
- 23
- 25
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
-
1it giv
ls -t head -2andls -tr | tail -2gives 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
headin both commands (to change the sort order too), or usels -tin 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.
- 12,190
- 326
-
6I suspect your answer hasn't gotten any up-votes because it parses the output of ls - see the canonical argument against doing so and this question about not parsing 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)...
- 669