如何按创建日期查找最近的文件?

如果我想通过文件名来查找文件,我会按照以下步骤进行:
find -name app

如果我想按类型查找文件,我会按照以下步骤进行:
find -name app -type d

然而,由于“app”是一个非常通用的名称,所以会出现许多结果。我想找到一个名为“app”的目录,它是今天创建的。有没有一个标志或命令可以实现这个?

1*nix文件系统不记录文件的创建/出生时间,GNU find(1)也没有提供按出生时间搜索的选项。这就是为什么所有的答案都是关于(状态)修改时间的。 - David Foerster
@DavidFoerster:那么,-ctime开关是做什么用的呢? - Thomas Weller
1@ThomasWeller:手册上写着:“-ctime n: 文件的状态最后一次发生更改(加重)”。没有提到文件创建时间。 - David Foerster
@DavidFoerster:谢谢。所以我们有-mtime表示修改时间和-ctime表示更改时间。<讽刺>听起来真的很棒,绝对不会让人困惑。</讽刺>好吧,这不是你的错... - Thomas Weller
@ThomasWeller:是的,为文件的状态修改时间添加-smtime或类似的选项会更直观。 - David Foerster
4个回答

要在整个文件系统(/)中搜索:
  • 目录(-type d),
  • 名为app的目录(-name app),
  • 比一天前(即24小时)修改得更近的目录(-mtime 0),
...使用以下命令:
find / -name app -type d -mtime 0

来源:man find

特别要注意-mtime标志和"find $HOME -mtime 0"示例的解释:

为了匹配-mtime 0,文件必须在过去24小时内进行了修改。

(因此,文件自上次修改以来的天数会被-mtime向下取整以便匹配。)


创建被视为一种修改文件时间戳的方式,因此即使文件在创建后没有被更改,这个方法也能起作用。它还可以匹配最近一天内创建的具有修改时间戳的文件夹,但你可能没有很多这样的文件夹,其确切名称是app
通常情况下,文件的创建时间不会存储在文件系统中。但是文件元数据最后更改的时间(例如名称/位置、所有权、权限)是存储的。如果您更喜欢根据文件内容修改的时间来判断,请使用-ctime代替-mtime
find / -name app -type d -ctime 0

对于-mtime-ctime,文件的初始创建被视为修改/状态更改。

我也遇到了这篇文章:https://www.digitalocean.com/community/tutorials/how-to-use-find-and-locate-to-search-for-files-on-a-linux-vps - JohnMerlino

获取所有在日期2020-02-282020-03-28之间的修改过的文件。
find . -type f -newermt 2020-02-28 -not -newermt 2020-03-28

命令查找选项:
如果您需要一个特定的日期范围,可以选择很多天之前。
例如,在/data/docs目录中查找2013年2月1日至2014年2月1日期间修改过的文件:
touch --date "2013-02-01" /tmp/start
touch --date "2014-02-01" /tmp/end
find /data/docs -type f -newer /tmp/start -not -newer /tmp/end

您可以将列表保存到名为findlist.txt的文本文件中,方法如下:
find /data/docs -type f -newer /tmp/start -not -newer /tmp/end > findlist.txt

难以置信,居然需要5行代码(你的3行 + 2行删除临时文件)才能在特定日期范围内找到文件。 - Thomas Weller
@ThomasWeller 注意,很好知道这意味着可以根据其他文件的日期来筛选列出的文件。 - david

你可以使用“修改时间”来进行操作。
find -name app -type d -mtime -1

(修改时间不超过1 x 24小时前)或
find -name app -type d -newermt yesterday

那么,-1的意思是指过去的24小时内? - JohnMerlino
我现在在一个目录中,其中包含一个名为app的目录,它是刚刚创建的。使用find -name app -type d可以检索到它,但是当我添加-mtime -1时,它就无法检索到了。 - JohnMerlino
@JohnMerlino 我不确定-1应该做什么。但是find的手册中明确推荐使用0来达到这个目的,对我来说也有效。 - Eliah Kagan