解释' find -mtime'命令

时间:2014-09-01 05:02:12

标签: linux bash find

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

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

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

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

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

4 个答案:

答案 0 :(得分:34)

find的POSIX规范说:

  

-mtime n       如果从初始化时间减去的文件修改时间除以86400(丢弃任何余数),则主要应评估为真, n

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

  

在描述中,无论 n 用作主要参数,它都应被解释为十进制整数,可选地前面加上加号('+')或减号( ' - ')签名,如下:

     

+n       超过 n
   n       完全 n
   -n       小于 n

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

答案 1 :(得分:5)

+1表示2天前。这是圆润的。

答案 2 :(得分:1)

要查找最近24小时内修改的所有文件,请使用以下文件。 -1表示1天或更短的时间之前更改。

find . -mtime -1 -ls

答案 3 :(得分:0)

您可以在 mtime 中使用查找命令。

例如:

 find /path of the folder -type f -mtime +30

-type指的是文件类型。

+30指的是当前日期之前的日期。

有关更多选项,我们可以参考the man page