gpt4 book ai didi

linux - 解释 'find -mtime' 命令

转载 作者:IT王子 更新时间:2023-10-29 00:19:16 25 4
gpt4 key购买 nike

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

执行这些命令时的日期是:

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

-mtimenThe primary shall evaluate as true if the file modification time subtracted from the initialization time, divided by 86400 (with any remainder discarded), is n.

有趣的是,find 的描述并没有进一步指定'initialization time'。不过,这可能是 find 初始化(运行)的时间。

In the descriptions, wherever n is used as a primary argument, it shall be interpreted as a decimal integer optionally preceded by a plus ( '+' ) or minus-sign ( '-' ) sign, as follows:

+nMore than n.
  nExactly n.
-nLess than n.

传输 comment 的内容到这个答案。

You can write -mtime 6 or -mtime -6 or -mtime +6:

  • Using 6 without sign means "equal to 6 days old — so modified between 'now - 6 * 86400' and 'now - 7 * 86400'" (because fractional days are discarded).
  • Using -6 means "less than 6 days old — so modified on or after 'now - 6 * 86400'".
  • Using +6 means "more than 6 days old — so modified on or before 'now - 7 * 86400'" (where the 7 is a little unexpected, perhaps).

在给定时间(2014-09-01 00:53:44 -4:00,我推断 AST 是大西洋标准时间,因此与 UTC 的时区偏移量在 ISO 中为 -4:00 8601 但在 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

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

因此,为 2014-08-30 日志文件计算的 n 值正好是 1(计算是用整数完成的算术),+1 拒绝它,因为它是严格的 > 1 比较(而不是 >= 1)。

关于linux - 解释 'find -mtime' 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com