解释'find -mtime'命令

我正在尝试删除除最近的日志以外的所有日期日志。在执行脚本删除文件之前,我当然想测试命令以确保获得正确的结果。

执行这些命令时,日期为:

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规范说:

-mtimen 如果从初始化时间中减去的文件修改时间除以86400(任何剩余部分均被舍弃),则主数据库应评估为true n

有趣的是,对的描述find未进一步指定“初始化时间”。但是,可能find是初始化(运行)的时间。

在描述中,无论在哪里 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)。

以上是 解释'find -mtime'命令 的全部内容, 来源链接: utcz.com/qa/410848.html

回到顶部