查找超过 6 个月的非托管文件

查找超过 6 个月的非托管文件

我正在尝试查找 6 个月或更长时间未碰过的所有文件。我运行了这个命令,但它只显示 6 个月内编辑过的所有文件。

find . -type f -mtime 183 -exec ls -latr {} \;

我怎样才能让它持续6个月或更长时间?

答案1

-mtime 183适用于其年龄向上舍入到下一个 24 小时周期等于 183 的文件,因此年龄介于 182*24*3600 秒(不包括)和 183*24*3600 秒(包括)之间(其中秒是 Unix 秒,这是有一个可变的持续时间,即地球日的86400部分,而不是 ISO 定义的秒的固定持续时间,因此所有天都是 86400 秒,我们不需要考虑闰秒。

使用-mtime +183,您将获得其年龄向上舍入到下一个 24 小时期间严格大于 183 的文件,因此年龄严格大于 183*24*3600 秒。

请注意,24 小时期间不一定与由于部分地区实行夏令时。

对于某些find实现(FreeBSD、GNU),您还可以使用! -newermt '6 months ago'.将修改时间与作为参数给出的 imemt进行比较。mt

这将给出在 6 个月前的同一天、同一时间之前修改的文件,但对于 GNU find(与 FreeBSD 相对),它不会进行 DST 调整(在适用 DST 的时区),就是这样为您提供如同 UTC 时区一样的信息。如果现在是 2016-07-01 13:00(夏令时),FreeBSDfind将报告最后修改的文件在 2016-01-01 13:00(冬令时)之前,而 GNUfind将报告最后修改的文件在 2016-01-01 12 之前:00(冬季时间)。当月的 29 日、30 日或 31 日调用时也可能会有变化,而 6 个月前的月份没有这样的日期。

答案2

+在日期值前面添加一个。从手册页:

   Numeric arguments can be specified as

   +n     for greater than n,

   -n     for less than n,

   n      for exactly n.

... When  find  figures  out
how  many  24-hour  periods  ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.

虽然这里指的是测试,但对于和测试atime来说是一样的。mtimectime

相关内容