I seem to need to find files and sort them on modification time just often enough to never remember how but knowing that there's a good way to do it.
Here's the best way I've found so far, it handles spaces correctly and executes a command (
ls in this case) on a per file basis. Change (or delete)
-n1 to execute the command on multiple files simultaneously.
find . -type f -printf "%T@ %p\0" \ # list all files "seconds-since-epoch filename NULL" | sort -z -nr \ # reverse sort based on seconds | cut -z -d' ' -f2- \ # only print filename | grep -zZ txt$ \ # only keep txt$ | xargs -0 -n1 ls # for each line, execute ls
or on one easy copy-paste line:
find . -type f -printf "%T@ %p\0" | sort -z -nr | cut -z -d' ' -f2- | grep -zZ txt$ | xargs -0 -n1 ls
The key here is
\0 to output a null character at the end of each filename and then
having each command in the pipe honour that null character (via