我正在尝试删除除最近的日志以外的所有日期日志。在执行脚本删除文件之前,我当然想测试命令以确保获得正确的结果。
执行这些命令时,日期为:
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
find的POSIX规范说:
-mtime n 如果从初始化时间中减去的文件修改时间除以86400(任何剩余部分均被舍弃),则主数据库应评估为true n 。
-mtime
n
有趣的是,对的描述find未进一步指定“初始化时间”。但是,可能find是初始化(运行)的时间。
find
在描述中,无论在哪里 n 用作主要参数,都应将其解释为十进制整数,可以选择在其前面加上加号(’+’)或减号(’-‘),如下所示: +n 超过 n 。 n 没错 n 。 -n 少于 n 。
在描述中,无论在哪里 n 用作主要参数,都应将其解释为十进制整数,可以选择在其前面加上加号(’+’)或减号(’-‘),如下所示:
+n 超过 n 。 n 没错 n 。 -n 少于 n 。
+n
-n
在给定的时间(2014-09-01 00:53:44 -4:00,在这里我推断AST是大西洋标准时间,因此在ISO 8601中与UTC的时区偏移是-4:00,但+在ISO 9945(POSIX)中为4:00,但这无关紧要):
1409547224 = 2014-09-01 00:53:44 -04:00 1409457540 = 2014-08-30 23:59:00 -04:00
所以:
1409547224 - 1409457540 = 89684 89684 / 86400 = 1
即使“自纪元以来的秒数”值错误,相对值也是正确的(对于世界上某个时区,它们是正确的)。
因此 n ,为2014-08-30日志文件计算的值是准确的1(该计算是使用整数算术完成的),而+1拒绝该值是因为它严格来说是一个> 1比较(而不是>= 1)。
1
+1
> 1
>= 1