181

I know ls -t will list all files by modified time. But how can I limit these results to only the last n files?

Ryan
  • 14,682
  • 32
  • 106
  • 179

7 Answers7

324

Try using head or tail. If you want the 5 most-recently modified files:

ls -1t | head -5

The -1 (that's a one) says one file per line and the head says take the first 5 entries.

If you want the last 5 try

ls -1t | tail -5
Paul Rubel
  • 26,632
  • 7
  • 60
  • 80
  • 3
    If I'm not mistaken, the shell represents the output of `ls` in multiple columns, but the output of `ls` is piped to following command with 1 file/dir at a time – Alex Mar 28 '13 at 20:22
  • 4
    This ignores the Total at the top: `ls -1t | head -n 6 | tail -n 5` – Ryan Mar 28 '13 at 21:50
  • 2
    I don't see a total, but if there is one that would certainly work. – Paul Rubel Mar 29 '13 at 13:31
45

The accepted answer lists only the filenames, but to get the top 5 files one can also use:

ls -lht | head -6

where:

-l outputs in a list format

-h makes output human readable (i.e. file sizes appear in kb, mb, etc.)

-t sorts output by placing most recently modified file first

head -6 will show 5 files because ls prints the block size in the first line of output.

I think this is a slightly more elegant and possibly more useful approach.

Example output:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv

Sameen
  • 729
  • 6
  • 19
15

Use tail command:

ls -t | tail -n 5
Alex
  • 10,470
  • 8
  • 40
  • 62
  • 3
    This gives the 5 oldest. You need to reverse the sort ( `ls -tr` ) or use `head` rather than `tail`, to get the 5 newest. – Headbank Jan 03 '20 at 13:52
9

By default ls -t sorts output from newest to oldest, so the combination of commands to use depends in which direction you want your output to be ordered.

For the newest 5 files ordered from newest to oldest, use head to take the first 5 lines of output:

ls -t | head -n 5

For the newest 5 files ordered from oldest to newest, use the -r switch to reverse ls's sort order, and use tail to take the last 5 lines of output:

ls -tr | tail -n 5
Headbank
  • 361
  • 2
  • 6
2

ls -t list files by creation time not last modified time. Use ls -ltc if you want to list files by last modified time from last to first(top to bottom). Thus to list the last n: ls -ltc | head ${n}

victrr
  • 37
  • 2
  • 1
    Which platform/version do you refer to? Can you provide a link? Looking at the [linux man-page](http://man7.org/linux/man-pages/man1/ls.1.html) yields the opposite of what you state: `-t sort by modification time, newest first` – Joma Sep 08 '16 at 21:35
2

None of other answers worked for me. The results were both folders and files, which is not what I would expect.

The solution that worked for me was:

find . -type f -mmin -10 -ls

This lists in the current directory all the files modified in the last 10 minutes. It will not list last 5 files, but I think it might help nevertheless

Aleks
  • 4,866
  • 3
  • 38
  • 69
-1

if you want to watch as it process last five modified file and refresh in 2 secs and show total number of files at top use this:

watch 'ls -Art | wc -l ; ls -ltr | tail -n 5'