find 命令的mtime参数的使用

本文详细解释了Linux find命令中mtime参数的用法,包括如何指定文件修改时间范围来查找文件,并通过实例演示如何筛选特定时间范围内的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(转载自:http://blog.sina.com.cn/s/blog_716358dc0100lj5p.html)
有关find -mtime这个参数的使用确实是我以前犯过错误。今天又有人问到我这个问题,我觉得有必要把这个问题在这里记录下来。
mtime参数的理解应该如下:
-mtime n 按照文件的更改时间来找文件,n为整数。
n表示文件更改时间距离为n天, -n表示文件更改时间距离在n天以内,+n表示文件更改时间距离在n天以前。
例如:
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件

为什么-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢?
因为n值只能是整数,即比1大的最近的整数是2,所有-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)。

另外一篇文章,《find mtime的时间算法》 http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/,和上一篇文章的结论有不一致的地方。我使用的系统和《find 命令的mtime参数的使用》描述的一致。

从“man find”得到的信息来看:
       -mtime n
              File's data was last modified n*24 hours ago.
    可以理解为第n个24小时。
有一个值得考虑的问题,就是“时间段区间左右两个端点的闭合情况”,find ./ -mtime 0 ,表示24小时以内,多次试验证实了这个区间不包括当前时间(应该是精确到秒),至于是否包括24小时整这个时间点,不太好试验,有待验证。



[root@db-3 log]# find -mtime -7 -name "ClientLog_*.log*"  -exec 'basename' {} \;|sort|grep -v `date +"%Y%m%d"`
ClientLog_20120723.log
ClientLog_20120724.log
ClientLog_20120725.log
ClientLog_20120726.log
ClientLog_20120727.log
ClientLog_20120728.log
ClientLog_20120729.log

取距今1~7天的文件名中包含日期字段的文件:
DateToday=`date +"%Y%m%d"`    #今天的日期
cat `find -mtime -7 -name "ClientLog_*.log*"  -exec 'basename' {} \;|sort|grep -v ${DateToday}`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值