解释'find -mtime'命令
我正在尝试删除除最近的日志以外的所有日期日志。在执行脚本删除文件之前,我当然想测试命令以确保获得正确的结果。
执行这些命令时,日期为:
Sep 1 00:53:44 AST 2014
目录清单:
Aug 27 23:59 testfile.2014-08-27.logAug 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(任何剩余部分均被舍弃),则主数据库应评估为truen
。
有趣的是,对的描述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:001409457540 = 2014-08-30 23:59:00 -04:00
所以:
1409547224 - 1409457540 = 8968489684 / 86400 = 1
即使“自纪元以来的秒数”值错误,相对值也是正确的(对于世界上某个时区,它们是正确的)。
因此 n
,为2014-08-30日志文件计算的值是准确的1
(该计算是使用整数算术完成的),而+1
拒绝该值是因为它严格来说是一个>
1比较(而不是>= 1
)。
以上是 解释'find -mtime'命令 的全部内容, 来源链接: utcz.com/qa/410848.html