Is there a shell command to find the newest created files recursively from a root directory?
4 Answers
find /mydir -type f -exec stat -c '%y %N' {} \; | sort -n
-
1
-
1In general, you should avoid using -exec for security reasons. GNU find offers -execdir as an alternative.– geocarSep 3, 2009 at 20:50
This method uses only find
(and sort
):
find /somedir -type f -printf "%T+ %p\n" | sort
You can constrain it to the most recent 3 days, for example, like this:
find . -type f -mtime -3 -printf "%T+ %p\n" | sort
Or the last 42.5 hours:
find . -type f -mmin -2550 -printf "%T+ %p\n" | sort
which is the same as:
find . -type f -mmin -$((42 * 60 + 30)) -printf "%T+ %p\n" | sort
To avoid forking one process per file checked, if you're on a machine with GNU versions of find and xargs, consider something like this:
find /dir -type f -print0 | xargs -0 stat -c '%Y %N' | sort -n
This 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" | sort -z -nr | cut -z -d' ' -f2- |xargs -0 -n1 ls