一、背景:为什么需要定期清理?
在现代软件系统中,尤其是涉及物联网设备、视频监控、AI推理或事件驱动架构的项目中,服务器每天都会产生大量数据。这些数据通常包括:
- 日志文件(如 .log、.json):记录系统运行状态、错误信息或用户行为;
- 图片文件(如 .jpg、.png):由摄像头、截图工具或图像处理模块生成;
- 视频片段(如 .mp4、.avi):用于事件回放或临时缓存。
这些文件虽然在短期内有重要价值,但长期保留不仅占用宝贵的磁盘空间,还可能带来以下风险:
🔴 磁盘空间耗尽 → 系统无法写入新数据 → 服务崩溃甚至服务器宕机!
尤其在资源受限的边缘服务器或云主机上,磁盘容量往往有限(例如 50GB 或 100GB)。若不加以管理,短短几周就可能被海量媒体文件“撑爆”。

因此,建立一套自动化的清理机制,及时删除过期无用的数据,是保障系统稳定运行的关键措施。
二、解决方案:使用 find 命令精准清理
Linux 系统提供了强大的文件查找工具 find,它不仅能定位文件,还能直接执行删除操作。下面介绍两条高效、安全的清理命令。
1. 删除超过 11 天的指定类型文件
find . -maxdepth 3 -type f $ -name "*.mp4" -o -name "*.jpg" -o -name "*.json" $ -mtime +11 -delete
命令解析:
- .:从当前目录开始搜索;
- -maxdepth 3:最多深入 3 层子目录,避免误扫深层未知结构;
- -type f:仅匹配普通文件(排除目录);
- $…$:逻辑分组,确保多个 -name 条件被正确组合;
- -name "*.mp4"、-name "*.jpg"、-name "*.json":只处理这三类文件;
⚠️ 注意:必须写成 *.json,而不是 .json,否则只会匹配名为 .json 的隐藏文件,无法删除 event_2025.json 这类正常文件。
- -mtime +11:文件修改时间 超过 11 天(即 12 天前及更早);
- -delete:直接删除匹配项。
✅ 效果:每天自动清理 11 天前的视频、图片和元数据,释放磁盘空间。
💡 安全建议:首次运行时,先去掉 -delete,确认输出是否符合预期:
find . -maxdepth 3 -type f $ -name "*.mp4" -o -name "*.jpg" -o -name "*.json" $ -mtime +11
2. 清理因文件删除而产生的空目录
find . -depth -type d -empty -delete
命令解析:
- -depth:采用 深度优先遍历,先处理子目录,再处理父目录;
- -type d:只匹配目录;
- -empty:仅选择完全为空的目录(无文件、无子目录);
- -delete:删除这些空目录。
✅ 作用:在删除大量文件后,很多中间目录会变为空壳。此命令能自动“打扫战场”,保持目录结构整洁,避免留下大量无用空文件夹。
🌰 举例:
删除 /c/XXXX/cam01/2025-01-01/video.mp4 后,2025-01-01 目录变空。
若 cam01 下再无其他内容,该命令也会将 cam01 一并删除。

三、自动化执行:配置定时任务(Cron)
手动执行清理命令显然不现实。我们需要让系统 每天自动运行 这些命令。Linux 的 cron 服务正是为此设计。

1. 什么是 Cron?
cron 是 Linux 内置的定时任务调度器,可按分钟、小时、天等周期自动执行命令或脚本。
2. 编写定时任务规则
Cron 表达式格式为:
分 时 日 月 星期 命令
例如:
- 0 1 * * * → 每天凌晨 1:00
- 0 2 * * * → 每天凌晨 2:00
3. 添加任务到 Crontab
步骤 1:编辑当前用户的定时任务
crontab -e
首次运行可能会提示选择编辑器(推荐 nano 或 vim)。
步骤 2:添加以下两行(注意路径和命令完整性)
# 每天凌晨 1 点:删除 /c/events 下超过 11 天的 .mp4/.jpg/.json 文件
0 1 * * * cd /c/XXXX && /usr/bin/find . -maxdepth 3 -type f $ -name "*.mp4" -o -name "*.jpg" -o -name "*.json" $ -mtime +11 -delete
# 每天凌晨 2 点:删除残留的空目录
0 2 * * * cd /c/XXXX && /usr/bin/find . -depth -type d -empty -delete
✅ 关键细节:
- 使用 cd /c/events && … 确保工作目录正确;
- 使用 /usr/bin/find(通过 which find 确认实际路径),避免 cron 环境变量缺失导致命令找不到;
- 两条任务错开 1 小时,确保先删文件、再删目录,逻辑严谨。
步骤 3:保存并退出
- 在 nano 中按 Ctrl+O 回车保存,Ctrl+X 退出;
- 在 vim 中输入 :wq 保存退出。
系统会自动加载新任务,无需重启服务。
4. 验证与调试
-
查看当前用户的定时任务:
crontab -l
-
查看 cron 执行日志(用于排查失败原因):
# Ubuntu/Debian
sudo grep CRON /var/log/syslog# CentOS/RHEL
sudo tail -f /var/log/cron -
添加日志记录(推荐):
0 1 * * * cd /c/XXXX && /usr/bin/find ... -delete >> /var/log/cleanup.log 2>&1
0 2 * * * cd /c/XXXX && /usr/bin/find ... -delete >> /var/log/cleanup.log 2>&1

四、总结

面对有限的服务器磁盘资源,“生成—使用—清理” 的闭环管理至关重要。本文提供的方案:
只需几分钟配置,即可大幅降低因磁盘爆满导致的服务中断风险。对于任何长期运行的项目,这都是一项值得投入的基础运维实践。
🛠️ 行动建议:
立即检查你的服务器磁盘使用情况(df -h),若 / 或数据盘使用率超过 80%,请尽快部署类似清理策略!
网硕互联帮助中心





评论前必须登录!
注册