Linux – How to List Files by Date Range

bashcommand linefindlinux

I would like to list files with 3 days years old.
I found this one at stackoverflow:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' ' | grep 2012

But I kind don't understand what the whole command means. I wonder if there is something short and simple to understand.

Best Answer

This should work

find . -type f -mtime -3

Explanation

find         find files
.            starting in the current directory (and it's subdirectories)
-type f      which are plain files (not directories, or devices etc)
-mtime -3    modified less than 3 days ago

See man find for details


Update

To find files last modified before a specific date and time (e.g. 08:15 on 20th February 2013) you can do something like

  touch -t 201302200815 freds_accident
  find . -type f ! -newer freds_accident
  rm freds_accident

See man touch (or info touch - ugh!)

This is moderately horrible and there may be a better way. The above approach works on ancient and non-GNU Unix as well as current Linux.

Related Question