解释'find -mtime'命令

use*_*633 19 linux bash find

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

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

Sep  1 00:53:44 AST 2014
Run Code Online (Sandbox Code Playgroud)

目录列表:

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
Run Code Online (Sandbox Code Playgroud)

我认为-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
Run Code Online (Sandbox Code Playgroud)

这是期望的效果,但它只是反复试验.这是什么意思啊?

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
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 36

用于查找的POSIX规范说:

-mtimen 如果从初始化时间中减去的文件修改时间除以86400(丢弃任何余数),则主要应评估为真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
Run Code Online (Sandbox Code Playgroud)

所以:

1409547224 - 1409457540 = 89684
89684 / 86400 = 1
Run Code Online (Sandbox Code Playgroud)

即使"自纪元以来的秒数"值错误,相对值也是正确的(对于世界某处的某个时区,它们是正确的).

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

  • @xxxvodnikxxx:我不确定我是否明白你在问什么。但是,您可以编写“-mtime 6”或“-mtime -6”或“-mtime +6”。没有符号的 `6` 表示“等于 6 天——所以在 'now - 6 * 86400' 和 'now - 7 * 86400' 之间修改”(因为小数天数被丢弃),而 `-6` 表示“小于6 天前 - 从 'now - 6 * 86400' 开始修改”,而 `+6` 表示“超过 6 天 - 所以在 'now - 7 * 86400' 之前或之前修改”(其中 7 有点出乎意料,也许)。如果这没有帮助(或者您可以证明它是错误的),请再次询问,更清楚地解释您的问题。 (8认同)
  • 简单点,拜托...如果用户想要获得 2 天前或更早修改的文件 - 3 天、4 天、..,他必须将“mtime 设置为 +1”?在这种情况下,减号是指向未来的小废话吗?:D 我说得对吗?:) (3认同)
  • @Jonathan Leffler,你的评论比答案更有意义。X)。一个人只是想要一个简单的理解,突然... UTC ISO8601 ... ISO9945 ... POSIX ... 1409547224 - 1409457540 = 89684 ... 评论真的很有帮助。谢谢。 (3认同)

小智 6

+1表示2天前.这是圆的.

  • 这个答案的核心观点是正确的,但它缺少了很多解释."+ 1"表示2天或更多天前(或至少2天前).引用手册页或类似的东西会很有帮助. (9认同)

bla*_*cuk 5

要查找过去 24 小时内修改的所有文件,请使用以下文件。这里的 -1 表示在 1 天或更短时间内更改。

find . -mtime -1 -ls
Run Code Online (Sandbox Code Playgroud)

  • 或微调至“-1”以下,例如在过去 6 小时内使用“-mmin -360”或“-mtime -0.25”。 (5认同)