Take the 2-minute tour ×

How can I generate a list of files in a directory [for example, "/mnt/hdd/PUB/"] ordered by the files modification time? [in descending order, the oldest modified file is at the lists end]

ls -A -lRt would be great: https://pastebin.com/raw.php?i=AzuSVmrJ

But if a file is changed in a directory, it lists the full directory, so the pastebined link isn't good [I don't want a list ordered by "directories", I need a "per file" ordered list]

OS: OpenWrt [no Perl -> not enough space for it :( + no "stat", or "file" command].

share|improve this question
Does your find have -printf? By the way, don't forget to mark answers as accepted when you can and upvote as often as you can. –  Dennis Williamson Feb 28 '11 at 16:42

3 Answers 3

Use find and sort:

find YOUR_START_DIR -type f -print0 |
    xargs -r -0 ls -l | 
        sort -k 6.2,6.5nr \
             -k 6.7,6.8nr \
             -k 6.10,6.11nr \
             -k 7.2,7.3nr \
             -k 7.5,7.6nr

the long list of k options after sort define the year, month, day, hour and minute as sort keys and order by them in that order.

Files saved on the same minute won't get ordered. If you want to go down to seconds and more, add "--full-time" to the ls command, and add new keys at the end of the sort command.

share|improve this answer
This is dependent (as is the OP's pipeline) on the format of the output of ls. –  Dennis Williamson Feb 28 '11 at 16:41
Sure, completely dependant on the ls output format. –  rems Feb 28 '11 at 16:45

Here's an ugly answer that partially works for me in cygwin:

 ls -A -lRt --full-time | sort | uniq | grep -v '^total\|:$'
  • Recursively lists files, displays full timestamps for every file
  • sorts them
  • discards duplicates
  • Greps out a few non-file entries such as "total files in directory X" and the header rows for files you're recursing into.
share|improve this answer
sort -u instead of sort | uniq –  Dennis Williamson Feb 28 '11 at 16:39
This doesn't work for me. Doing it this way sort will order alphabetically from the start of the line. –  rems Feb 28 '11 at 16:46
@rems Quite so... I spent another hour or two tweaking it and learned a bit about regexes and sed (and sort -k) along the way. Never did get a perfect solution though. –  Daniel J. Pritchett Feb 28 '11 at 22:36

"Changing" the file in the directory may well update the directory's modification time. But if you are not interested in the directories, grep them out:

ls -AlRt | egrep -v '^d'
share|improve this answer

Your Answer


