-mtime +14表示修改时间超过14天(即15天及以上),-mtime 14表示恰好第14天内,-mtime -14表示14天以内;时间按24小时向下取整,基于文件mtime。

在Linux中,用find按时间精准清理两周前的日志文件,关键在于正确理解并使用-mtime(基于修改时间)或-mmin(基于分钟)、-newermt(指定日期字符串)等参数——尤其要注意-mtime +14表示“超过14天”,即**15天及以上**,而非严格等于14天。
明确时间语义:+14 vs -14 vs 14
find的时间参数以24小时为单位向下取整,且默认基于文件的最后修改时间(mtime):
-
-mtime +14→ 修改时间在15天前或更早(即 >336 小时) -
-mtime 14→ 修改时间在第14天内(即 336~360 小时之间) -
-mtime -14→ 修改时间在14天以内(即
若需严格匹配“14天前(含)至今”,推荐用-newermt,它支持可读日期格式,精度更高、不易歧义。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
安全查找:先预览再删除
执行清理前务必先列出目标文件,确认路径和时间范围无误:
- 查两周前(含)的所有
.log文件(按修改时间):find /var/log/myapp -name "*.log" -mtime +13
(说明:+13 表示“14天前及更早”,因+N= 大于N天 → 想包含第14天当天,用+13) - 更精准写法(推荐),查2024-05-20 00:00:00之前修改的文件:
find /var/log/myapp -name "*.log" ! -newermt "2024-05-20" - 查过去14天内(不含今天)的文件,可用:
find /var/log/myapp -name "*.log" -newermt "$(date -d '14 days ago' +%F)" ! -newermt "$(date +%F)"
执行清理:加 -delete 或配合 xargs
确认预览结果正确后,再执行删除。优先用-delete(高效、原子、无需shell解析):
- 安全删除两周前日志(推荐):
find /var/log/myapp -name "*.log" -mtime +13 -delete - 若需保留最近100个日志,仅删旧文件(进阶):
find /var/log/myapp -name "*.log" -mtime +13 | sort | head -n -100 | xargs rm -f - 带日志记录的清理(便于审计):
find /var/log/myapp -name "*.log" -mtime +13 -print0 | tee /tmp/deleted_logs.txt | xargs -0 rm -f
注意事项与避坑提醒
实际运维中容易忽略的关键点:
-
日志轮转影响mtime:logrotate 默认会
copytruncate或create新文件,原日志文件的mtime可能未更新。此时应结合-ctime(状态变更时间)或-newerct判断,或统一用logrotate自身配置管理生命周期 -
路径权限问题:确保运行用户对目标目录有读+执行(
rx)权限,否则find会跳过或报错 -
避免误删:切勿在根目录
/或/var/log全量执行-delete;始终先用-ls或-print验证 -
时区一致性:服务器时间、cron时区、
date命令输出需一致,建议统一用UTC或本地标准时间

















