find has good support for finding files the more modified less than X days ago, but how can I use find to locate all files modified after a certain date?

I can't find anything in the find man page to do this, only to compare against another files time or to check for differences between created time and now. Is making a file with the desired time and comparing against that the only way to do this?

  • 1
    This would be better asked on SuperUser.com – Josh Brower Mar 16 '10 at 11:30
  • 6
    I'm not going to close this: could be interesting for sysadmins as well. – splattne Mar 16 '10 at 13:41
  • The command is for part of a backup script, which grabs everything from /etc that was changed post-installation in our nightly backups. – DrStalker Mar 18 '10 at 1:05
  • Nine years old and I just noticed when moderating a new answer: the title and the body of this question do not state the same. The title asks for 'files older than <date>' but the body states 'modified after a certain date'. I interpret 'after' as newer than a specific date, not older. – Joffrey Jul 11 '19 at 21:33

If you have only '-newer file' then you can take this workaround:

touch -t 201003160120 some_file
find . -newer some_file

man touch:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

Assuming that your touch has this option (mine is touch 5.97).

| improve this answer | |

No, you can use a date/time string.

From man find:

-newerXY reference
Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are placeholders for other letters, and these letters select which time belonging to how reference is used for the comparison.

          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time


find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls
| improve this answer | |
  • 5
    I'm using Centos 5.2, which uses GNU find version 4.2.27, and it does not support -newermt or any -newer parameter other than "-newer file" – DrStalker Mar 16 '10 at 7:08
  • 1
    GNU findutils 4.3.3 and newer supports -newerXY according to savannah.gnu.org/bugs/?11668 – Philip Durbin Jun 29 '10 at 13:58

Not directly related to question, but might be interesting for some that stumble here.

find command doesn't directly support -older parameter for finding files older than some required date, but you can use negate statement (using accepted answer example):

touch -t 201003160120 some_file
find . ! -newer some_file

will return files older than provided date.

| improve this answer | |
  • 3
    editors - maybe it should be merged into accepted answer? – nEJC Sep 6 '12 at 12:18
  • this solution is the most elegant way to solve this kind of issue :) – Labynocle Jan 21 '15 at 15:30
find <dir> -mtime -20

this find command will find files modified within the last 20 days.

  • mtime -> modified (atime=accessed, ctime=created)
  • -20 -> lesst than 20 days old (20 exactly 20 days, +20 more than 20 days)

You acan add additional limitations like:

find <dir> -mtime -20 -name "*.txt"

the same as before, but only finds files ending with '.txt'.

| improve this answer | |

Just to add on - you may even use two newermt arguments to search in a time interval:

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

to find all files from march 2007.

| improve this answer | |
find ! -newermt “<DATE>”

like this:

find ! -newermt “jan 01 2015” 

This will give you files older than 01-01-2015 in your current directory.


| improve this answer | |
  • I was about to write a comment welcoming you on ServerFault and asking you to reconsider posing a duplicate answer until I realized the question title and body say different things: the title asks for 'files older than <date>' and the question states 'modified after a certain date', which in my opinion are two different things. Maybe you could in your post clarify the difference and explain the use of the negate. Thank you for contributing and I will post a comment on the question for clarification. Thank you for contributing! – Joffrey Jul 11 '19 at 21:30

You could use a script like this


if [ $# -ne 1 ];then
  when=` date -d "$1" +"%s" `
now=`date +"%s"`

seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `

find . -cmin $minutes -print

Save it in your $PATH as "newerthan" and make it executable.

Then you can find file modified after a certain date like this:

newerthan "2010-03-10"


newerthan "last year"


newerthan "yesterday"

That should do what you want. I don't think there is a built in way to achieve this otherwise.

| improve this answer | |
  • It's not necessary to use bc for integer math, Bash can do it: ((seconds = when - now)), the format argument to date should have a plus date +%s and some systems may not have date -d – Paused until further notice. Mar 16 '10 at 11:02
  • This is for Centos 5.2. Which does have -d. Useful to know about the integer maths though. – Richard Holloway Mar 16 '10 at 11:29

if your date is formatted such that its ok for comparison,

find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
| improve this answer | |

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.