我正在尝试删除除最近日期之外的所有日期日志。在我执行脚本删除文件之前,我当然想测试我的命令,以确保我提供准确的结果。
执行这些命令时,日期为:
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
答案 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。