解释“find -mtime”命令
Posted
技术标签:
【中文标题】解释“find -mtime”命令【英文标题】:Explaining the 'find -mtime' command 【发布时间】:2014-10-25 06:49:47 【问题描述】:我正在尝试删除除最新日志之外的所有日期日志。在我执行脚本删除文件之前,我当然想测试我的命令以确保我得到准确的结果。
执行这些命令时,日期为:
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
【问题讨论】:
我的服务器上只有 info 命令,没有 /mtime 选项。 问题并不准确:据我了解,“最近的”是“最新的”或“最年轻的”之类的东西——这不是示例显示的“过去 24 小时”。 【参考方案1】:find 的 POSIX 规范说:
-mtime
n
如果从初始化时间中减去的文件修改时间除以 86400(丢弃任何余数)为n
,则主节点应评估为真。
有趣的是,find
的描述并没有进一步指定“初始化时间”。不过,这可能是 find
初始化(运行)的时间。
在描述中,只要将
n
用作主要参数,则应将其解释为十进制整数,可选地以加号 ( '+' ) 或减号 ( '- ' ) 符号,如下:
+n
超过n
。n
正是n
。-n
小于n
。
在给定时间(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
)。
【讨论】:
Simpy,拜托.. 如果用户想要修改文件 2 天前或更早 - 3 天,4,..,他必须设置mtime to +1
?在这种情况下,减号是指向未来的小无稽之谈? :D 我说得对吗? :)
@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 可能有点出乎意料) .如果这没有帮助(或者您可以证明它是错误的),请再次询问,更清楚地解释您的问题。
哦,谢谢伙计,这正是我没有理解的原因:) 所以这个数字仍然意味着“过去”的障碍,ans 符号只是告诉间隔文件应该在哪一边,很好的解释:)
@Jonathan Leffler 您的评论比答案更有意义。 X)。一个人只是想要一个简单的理解,突然... UTC ISO8601... ISO9945...POSIX...1409547224 - 1409457540 = 89684... 评论真的很有帮助。谢谢。【参考方案2】:
+1 表示 2 天前。它是圆形的。
【讨论】:
这个答案的核心观点是正确的,但它缺少很多解释。+1
表示 2 天或更多天前(或至少 2 天前)。引用手册页或类似内容会很有帮助。【参考方案3】:
要查找过去 24 小时内修改的所有文件,请使用以下文件。这里的 -1 表示在 1 天或更短时间内更改。
find . -mtime -1 -ls
【讨论】:
或微调至略低于“-1”,例如在过去 6 小时内使用“-mmin -360”或“-mtime -0.25”。以上是关于解释“find -mtime”命令的主要内容,如果未能解决你的问题,请参考以下文章
Linux find查找命令的mtime,cime,atime迷雾