Linux:使用find查找比<date>更早的文件

find有很好的支持find文件更多的修改less于X天前,但我怎样才能使用find定位所有文件修改后的某个date?

我找不到在find手册页中的任何内容来做到这一点,只是比较另一个文件的时间或检查创build时间和现在之间的差异。 正在制作一个具有所需时间的文件,并与唯一的方法做比较?

    如果你只有“更新文件”,那么你可以采取这个解决方法:

     touch -t 201003160120 some_file find . -newer some_file 

    男人接触:

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

    假设你的触摸有这个选项(我的触摸5.97)。

    不,您可以使用date/时间string。

    man find

    -newerXY参考
    将当前文件的时间戳与参考进行比较。 引用参数通常是文件的名称(其中一个时间戳用于比较),但也可能是描述绝对时间的string。 X和Y是其他字母的占位符,这些字母select哪个时间属于如何使用引用来进行比较。

      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 

    与问题没有直接关系,但对于那些在这里绊倒的人可能会感兴趣。

    find命令不直接支持用于查找超过某些所需date的文件的-older参数,但可以使用否定语句(使用接受的答案示例):

     touch -t 201003160120 some_file find . ! -newer some_file 

    将返回比提供date更早的文件。

     find <dir> -mtime -20 

    此查找命令将查找在过去20天内修改的文件。

    • mtime – >修改(atime =访问,ctime =创build)
    • -20 – > 20天(20天20天,+20天以上20天)

    您可以添加其他限制,如:

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

    与以前一样,但只能find以“.txt”结尾的文件。

    只需要添加 – 你甚至可以使用两个newermt参数在一个时间间隔内进行search:

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

    从三月2007find所有文件。

    你可以使用这样的脚本

     #!/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 

    将它保存在$ PATH中作为“newerthan”并使其可执行。

    然后你可以find这样的特定date后修改的文件:

     newerthan "2010-03-10" 

    要么

     newerthan "last year" 

    要么

     newerthan "yesterday" 

    这应该做你想要的。 否则我不认为有内置的方法来实现这一点。

    如果你的date格式化为可以比较的话,

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