为什么使用 -mtime -0 和 +0 时 `find` 的行为会有所不同?

为什么使用 -mtime -0 和 +0 时 `find` 的行为会有所不同?

Ubuntu 14.04 为 Tomcat 7 提供了日志轮换功能,并假定日志文件按天命名,因此它会搜索这些文件,并压缩和删除现有的文件。根据日志文件是否存在以及日志文件的更改频率,这可能会与我自己的由 Tomcat 7 托管的 Web 应用程序使用的每月命名方案发生冲突:

/etc/cron.daily/tomcat7

gzip: /var/log/tomcat7/…/RebootDevice/2017-05.log.gz already exists;       not overwritten

我可以忍受每隔几天或几周发送一次这些消息,因为默认情况下日志消息仅包含错误,而这些错误不应该出现得太频繁。我不明白的是为什么我第二天就收到此消息。Ubuntu 执行以下操作:

find /var/log/$NAME/ -name \*.$LOGEXT -daystart -mtime +0 -print0

我已经在我的实际目录中进行了测试,结果如下:

root@…:/var/log/tomcat7/…/RebootDevice# ls -lisa
[…]
1089049 0 -rw-r--r-- 1 tomcat7 tomcat7    0 Mai 29 09:09 2017-05.log
1089047 4 -rw-r--r-- 1 tomcat7 adm      402 Mai 26 10:22 2017-05.log.gz

root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime -0
root@…:/var/log/tomcat7/…/RebootDevice# find . -name \*.log -daystart -mtime +0
./2017-05.log

正如您所看到的,使用调用+0可以找到我的文件,即使它是两天前最后一次写入的,而使用-0却找不到。-mtime定义为n*24小时,所以+/-0应该没有任何区别,根据我的理解-daystart,测试只锚定在整天的开始,应该是00:00

那么,为什么在这种情况下-0vs. 的+0行为会有所不同?这似乎造成了几个小时的差异1*24

答案1

man find

-mtime n
文件数据最后一次修改是n*24在几个小时前。[…]

无论你是否使用-daystart,不管舍入如何工作,对于特定的find调用,所有文件都可以分成几个不相交的集合不知何故

  • 答:文件修改于 0 天前,
  • B:1天前修改的文件,
  • C:2天前修改过的文件,
  • D:3天前修改过的文件,

该手册还指出:

数字参数可以指定为

+n表示大于n
-n表示小于n
n表示恰好n

正如您所看到的,这里的减号不是(数学)负一的因数。相反:

-mtime -0不匹配任何内容;
-mtime 0匹配集合 A;
-mtime +0匹配 B、C、D、…。

-mtime -1与集合 A 匹配;
-mtime 1与集合 B 匹配;
-mtime +1与集合 C、D、… 匹配。

-mtime -2匹配 A 和 B(相当于! -mtime +1);
等等。

相关内容