为什么 find(ing) by -atime 不打印预期的文件?

为什么 find(ing) by -atime 不打印预期的文件?

我正在尝试递归查找超过 365 天未访问的文件。我可以使用 stat 并验证该文件是否已经超过 365 天没有被访问过。奇怪的是,该文件显示大约 6 个月前已更改,但统计数据再次显示上次访问是一年多前。

然后我尝试使用 find 命令并搜索一年多没有访问过的文件,但我验证的文件没有列出:

skunkbad:/var/www/htdocs/newera$ stat ./index.html
  File: './index.html'
  Size: 31          Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d  Inode: 3279283     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/skunkbad)   Gid: ( 1001/ webdevs)
Access: 2018-01-08 16:22:58.271143975 -0800
Modify: 2017-09-21 14:01:36.950307771 -0700
Change: 2018-06-04 09:00:36.801632639 -0700
  Birth: -

skunkbad:/var/www/htdocs/newera$ find . -atime +365 -type f -print
skunkbad:/var/www/htdocs/newera$

那么,在这种情况下,为什么 find 没有列出这个 index.html 文件呢?如何递归查找超过 365 天未访问过的文件?

我这么问是因为我打算发出一个涉及这些文件的命令,但我需要知道它会起作用。 90 天的示例:

find -type f -atime +90 -exec touch -a {} +

答案1

手册用于find-atime解释了、-ctime和测试的时间计算如何进行-mtime

-atime n

文件上次访问时间为 n*24 小时前。当 find 计算出上次访问文件是在多少个 24 小时之前,任何小数部分都会被忽略,因此为了匹配-atime +1,文件必须至少在两天前被访问过。

第二部分是如何指定数字参数:

数字参数可以指定为

+n 大于 n,

-n 小于 n,

n 恰好为 n。

因此,当您指定 时-atime +365find将检索超过 365 天前访问过的文件。由于计算不考虑分数,这意味着文件仅在至少 366 天前(天,如 366*24 小时而不是日历天)被访问过时才会匹配。

因此,在您的情况下,find . -atime +365仅在访问之日起 366*24 小时后才会匹配显示的文件。此条件在 2019-01-09 16:22:58 之后变为真。

相关内容