I want to use the GNU find command to find files based on a pattern, and then have them displayed in order of the most recently modified file to the least recently modified.

I understand this:

find / -type f -name '*.md'

but then what would be added to sort the files from the most recently modified to the least?


3

There are 3 best solutions below

0
On
find <dir> -name "*.mz" -printf "%Ts - %h/%f\n" | sort -rn

Print the modified time in epoch format (%Ts) as well as the directories (%h) and file name (%f). Pipe this through to sort -rn to sort in reversed number order.

1
On

Pipe the output of find to xargs and ls:

find / -type f -name '*.md' | xargs ls -1t
0
On

find can't sort files, so you can instead output the modification time plus filename, sort on modification time, then remove the modification time again:

find . -type f -name '*.md' -printf '%T@ %p\0' |   # Print time+name
  sort -rnz |                                      # Sort numerically, descending
  cut -z -d ' ' -f 2- |                            # Remove time
  tr '\0' '\n'                                     # Optional: make human readable

This uses \0-separated entries to avoid problems with any kind of filenames. You can pass this directly and safely to a number of tools, but here it instead pipes to tr to show the file list as individual lines.