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 {} \;