我正在尝试删除除最新日志之外的所有带日期的日志。在执行脚本来删除文件之前,我当然想测试我的命令以确保我得到准确的结果。
执行这些命令时,日期为:
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
如果从初始化时间中减去文件修改时间,再除以 86400(丢弃任何余数),则主项应评估为 true。 有趣的是,n
n
的描述并没有进一步指定“初始化时间”。 不过,这可能是
find
初始化(运行)的时间。
在描述中,无论何时使用
find
评论或作为主要参数,都应将其解释为十进制整数,可选地在前面加一个加号 ( '+' ) 或减号 ( '-' ) 符号,如下所示:
n
超过
。+n
n
正是。n
n
小于。 将-n
-mtime 6
或
:-mtime -6
使用不带符号的-mtime +6
表示“等于 6 天 - 因此在 'now - 6 * 86400' 和 'now - 7 * 86400' 之间进行修改”(因为小数天数被丢弃)。
- 使用
表示“不到 6 天 - 因此在‘现在 - 6 * 86400’或之后进行了修改”。6
- 使用
表示“超过 6 天——因此在‘现在 - 7 * 86400’或之前进行了修改”(其中 7 可能有点出乎意料)。-6
- 在给定时间(2014-09-01 00:53:44 -4:00),我推断 AST 是大西洋标准时间,因此在 ISO 8601 中与 UTC 的时区偏移是 -4:00 但+4:00 在 ISO 9945 (POSIX) 中,但这并不重要):
+6
所以:
1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00
即使“自纪元以来的秒数”值错误,相对值也是正确的(对于世界上某个地方的某些时区,它们是正确的)。
因此,为 2014-08-30 日志文件计算的
1409547224 - 1409457540 = 89684
89684 / 86400 = 1
值恰好是 n
(计算是通过整数算术完成的),并且
1
拒绝它,因为它严格来说是 +1
比较(而不是 > 1
)。+1 表示 2 天前。是圆的。
要查找过去 24 小时内修改的所有文件,请使用以下命令。这里的 -1 表示 1 天或更短时间内更改。
find . -mtime -1 -ls
正如 Jonathan Leffler 在上面的评论中所说,将 + 与 -mtime 一起使用非常有用,因为它适用于一整天。 例如,-mtime +1 查找超过 2 天前更改的文件 => 至少 48 小时。 如果需要更精确,可以使用 -mmin 按分钟搜索。 您还可以组合 -mtime +1 -mtime -3 等选项来查找 2 到 3 天前更改的文件。