Linux:使用 find 查找早于

Linux:使用 find 查找早于

find对于查找少于 X 天前修改的文件有很好的支持,但是我如何使用它find来查找在某个日期之前修改的所有文件?

我在手册页中找不到任何find可以执行此操作的内容,只能将其与另一个文件的时间进行比较,或检查创建时间和现在的时间之间的差异。创建一个具有所需时间的文件并与之进行比较是唯一的方法吗?

答案1

如果您只有“-newer file”,那么您可以使用以下解决方法:

# create 'some_file' having a creation date of 16 Mar 2010:
touch -t 201003160120 some_file

# find all files created after this date
find . -newer some_file

男人触摸:

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

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

答案2

不,您可以使用日期/时间字符串。

man find

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

          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

答案3

与问题没有直接关系,但对于在这里偶然发现的人来说可能会很有趣。

寻找命令不直接支持 -older 参数来查找早于某些要求日期的文件,但您可以使用否定语句(使用接受的答案示例):

touch -t 201003160120 some_file
find . ! -newer some_file

将返回文件较旧比提供的日期。

答案4

补充一下 - 您甚至可以使用两个 newermt 参数在时间间隔内进行搜索:

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

查找自 2007 年 3 月以来的所有文件。

相关内容