Linux find 命令按时间查找文件
FreeGuideOnline
最新
2026-07-06
bash
查找当前目录下,最近 1 天内修改过的所有文件
find . -type f -mtime -1
查找 /var/log 下,7 天前修改过的日志文件(常用于归档)
find /var/log -name "*.log" -mtime +7
查找 /home 下,恰好在 30 天前那天访问过的文件
find /home -atime 30
查找 /tmp 下,超过 15 天未访问的文件并删除(谨慎使用)
find /tmp -type f -atime +15 -delete
### 按分钟查找:-mmin, -amin, -cmin
对于更精细的时间控制,需要使用分钟级选项,参数为分钟数,规则与天数选项同理。
- **`-mmin -60`**:60 分钟内修改过的文件。
- **`-mmin +120`**:120 分钟之前修改过的文件。
- **`-mmin 5`**:恰好 5 分钟前修改的文件(时间窗口为 5 分钟到 6 分钟前之间)。
#### 现实场景
```bash
# 紧急搜寻最近 10 分钟内被修改过的配置文件(确认是否有意外改动)
find /etc -type f -mmin -10
# 找出 2 小时前状态改变过的文件(如权限刚被调整)
find /srv -ctime -120
使用相对时间比较:-newer
除了绝对时间偏移,find 还支持与指定参考文件的时间戳进行比较,这在实际中非常灵活。
-newer 文件A:查找修改时间比“文件A”更晚的文件。! -newer 文件A:查找修改时间不比“文件A”更晚(即早于或等于)的文件,可搭配组合出时间区间。
还可以精确指定比较哪个时间戳:
-newermt '2025-01-01':修改时间晚于该日期。-newerat '2 days ago':访问时间晚于 2 天前。-newerct '2025-03-15 12:00:00':状态改变时间晚于该时刻。
这些选项接受时间字符串,非常直观,无需计算天数或分钟数。
# 查找比 reference.log 修改时间更新的所有文件
find . -type f -newer reference.log
# 查找在 2025 年之后修改的 jpg 图片
find /photos -name "*.jpg" -newermt 2025-01-01
# 查找上次访问时间在 7 天前的那个时间点之后的文件
find /documents -type f -newerat "1 week ago"
组合条件与实用技巧
精准时间区间查询
find 支持逻辑运算符 -a(与,默认)和 -o(或)。利用它们可以框定一个时间窗口。
# 查找修改时间在 3 天前到 7 天前之间的文件(即范围 3~7 天)
find . -type f -mtime +3 -mtime -7
# 查找最近 30 分钟内未访问过且大于 1M 的文件
find /data -type f -amin +30 -size +1M
结合 -daystart 选项
默认情况下,-mtime 等单位是基于当前执行的时刻向前推算 24 小时。若希望以日历日为基准(即从今天的 0 点开始计算),可以添加 -daystart 选项。
# 查找昨天(从昨天 0 点到今天 0 点)修改过的文件
find . -daystart -mtime 1
# 查找今天修改过的文件
find . -daystart -mtime -1
执行操作
找到文件后通常不是为了“看”,而是为了“处理”。常用的动作有:
-exec:对每个文件执行命令。{}代表文件名,\;结束命令。-exec rm {} \;或-delete:删除文件。-ls:以ls -dils格式输出文件详情,便于查看时间。
# 将 30 天前的日志文件压缩归档
find /var/log/ -type f -name "*.log" -mtime +30 -exec gzip {} \;