解释find -mtime命令

我试图删除除最近的所有date日志。 在我执行一个脚本来删除这些文件之前,我想要testing我的命令以确保我能够提供准确的结果。

执行这些命令时,date是:

Sep 1 00:53:44 AST 2014 

目录列表:

 Aug 27 23:59 testfile.2014-08-27.log Aug 28 23:59 testfile.2014-08-28.log Aug 29 23:59 testfile.2014-08-29.log Aug 30 23:59 testfile.2014-08-30.log Aug 31 23:59 testfile.2014-08-31.log Sep 1 00:29 testfile.log 

我以为-mtime +1应该列出一天之内的所有文件。 为什么不列出8-30.log?

 find . -type f -mtime +1 -name "testfile*log" ./testfile.2014-08-27.log ./testfile.2014-08-28.log ./testfile.2014-08-29.log 

这是预期的效果,但这只是反复试验而已。 这是0说什么?

 find . -type f -mtime +0 -name "testfile*log" ./testfile.2014-08-30.log ./testfile.2014-08-27.log ./testfile.2014-08-28.log ./testfile.2014-08-29.log 

查找的POSIX规范说:

-mtime n如果从初始化时间减去文件修改时间除以86400(除去任何剩余的部分),则主要评估为真。

有趣的是, find的描述没有进一步指定“初始化时间”。 这可能是,当find被初始化(运行)的时候。

在描述中,无论n用作主参数,它都应该被解释为一个十进制整数,可选地在前面加上('+')或减号(' – ')符号,如下所示:

+n多于n
n正好n
-n小于n

在给定的时间(2014-09-01 00:53:44 -4:00,我推测AST是大西洋标准时间,因此与ISO 8601相比UTC的时区偏移是-4:00,但是+ 4:00在ISO 9945(POSIX)中,但没关系):

 1409547224 = 2014-09-01 00:53:44 -04:00 1409457540 = 2014-08-30 23:59:00 -04:00 

所以:

 1409547224 - 1409457540 = 89684 89684 / 86400 = 1 

即使“时代以来的秒数”值是错误的,相对值也是正确的(对于世界上某个时区的某个时区,它们是正确的)。

因此,为2014-08-30日志文件计算的n值恰好为1 (使用整数算术进行计算),并且+1由于严格地> 1比较(而不是>= 1 )而被拒绝。

+1表示2天前。 它是圆的。