Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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?

share|improve this question
    
This would be better asked on SuperUser.com –  Josh Brower Mar 16 '10 at 11:30
4  
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

7 Answers 7

up vote 10 down vote accepted

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).

share|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

Example:

find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls
share|improve this answer
2  
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
    
GNU findutils 4.3.3 and newer supports -newerXY according to savannah.gnu.org/bugs/?11668 –  Philip Durbin Jun 29 '10 at 13:58
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'.

share|improve this answer

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.

share|improve this answer
1  
editors - maybe it should be merged into accepted answer? –  nEJC Sep 6 '12 at 12:18

You could use a script like this

#!/bin/bash

if [ $# -ne 1 ];then
  when="today"
else
  when=` date -d "$1" +"%s" `
fi
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"

or

newerthan "last year"

or

newerthan "yesterday"

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

share|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 –  Dennis Williamson 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,

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
share|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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.