3

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].

1
  • 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. Feb 28, 2011 at 16:42

3 Answers 3

1

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.

2
  • This is dependent (as is the OP's pipeline) on the format of the output of ls. Feb 28, 2011 at 16:41
  • Sure, completely dependant on the ls output format.
    – rems
    Feb 28, 2011 at 16:45
0

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.
3
  • sort -u instead of sort | uniq Feb 28, 2011 at 16:39
  • 1
    This doesn't work for me. Doing it this way sort will order alphabetically from the start of the line.
    – rems
    Feb 28, 2011 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. Feb 28, 2011 at 22:36
0

"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'

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.