![为什么 find(ing) by -atime 不打印预期的文件?](https://linux22.com/image/145875/%E4%B8%BA%E4%BB%80%E4%B9%88%20find(ing)%20by%20-atime%20%E4%B8%8D%E6%89%93%E5%8D%B0%E9%A2%84%E6%9C%9F%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F%20.png)
我正在尝试递归查找超过 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 +365
,find
将检索超过 365 天前访问过的文件。由于计算不考虑分数,这意味着文件仅在至少 366 天前(天,如 366*24 小时而不是日历天)被访问过时才会匹配。
因此,在您的情况下,find . -atime +365
仅在访问之日起 366*24 小时后才会匹配显示的文件。此条件在 2019-01-09 16:22:58 之后变为真。