【问题标题】:Using find to locate files modified within yesterday使用 find 查找昨天修改过的文件
【发布时间】:2016-11-17 17:13:31
【问题描述】:

我想要一个 shell 命令来查找修改日期为昨天的文件 - 仅限 24 小时。这意味着我只想找到昨天修改过的文件。

【问题讨论】:

  • 假设您在 2016-07-14 的 10:00 运行命令。您是否正在寻找在 2016-07-13T00:00:00 和 2016-07-13T23:59:59 之间修改的文件(都在您当前的时区)?或者您是否正在查找过去 24 小时内修改过的文件,在这种情况下,范围在 2016-06-13T10:00:00 和 2016-07-14T10:00:00 之间?还是别的什么?

标签: shell find


【解决方案1】:

将 find 与 mtimedaystart 一起使用,它将查找 1*24 小时前修改过的文件,从午夜(daystart)开始计算:

find dir -daystart -mtime 1

【讨论】:

  • Explaining find -mtime command——我认为这还不能满足要求。
  • 对,但是当与-daystart 结合使用时,它会做正确的事情(即从昨天 0:00 到 23:59 之间查找文件)
  • 是的——-daystart 工作,假设您使用的是 GNU find。 (例如,BSD / Mac OS X find 不支持 -daystart,尽管它确实支持 -newermt 和相关选项。)
【解决方案2】:

此答案假设您拥有 GNU datefind。它还假设如果您在 2016-07-14 的任何时间运行脚本,您希望在 2016-07-13T00:00:00 或之后和 2016-07-14T00:00:00 之前修改文件。

如果这些假设是正确的,那么您可以使用:

find .  -newermt "$(date -d yesterday +'%Y-%m-%d 00:00:00')" \
    '!' -newermt "$(date -d today     +'%Y-%m-%d 00:00:00')"

第一个命令替换生成(在 2016 年 7 月 14 日)输出 2016-07-13 00:00:00 和第二个 2016-07-14 00:00:00-d today 不需要得到正确的结果,但会显示对称性。

条件总体意思是“在昨天早上的午夜或之后修改,并且在今天早上的午夜之后没有修改”。

在没有 GNU date 的系统上更难评估不同的日期。

请参阅Explaining find -mtime command,了解为什么使用-mtime 无法满足假定要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多