linux下自动清理过期备份需确保命名含时间戳、优先按数量保留、预览模式验证、绝对路径与path设置、日志记录及cron定时执行。

Linux 下自动清理过期备份数据,核心在于准确识别备份文件、合理设定保留策略、安全执行删除操作。关键不是写一个“能跑”的脚本,而是让它可靠、可维护、不误删。
明确备份命名与时间标识规则
脚本能否正确判断“过期”,取决于备份文件是否自带可解析的时间信息。推荐在生成备份时就嵌入时间戳,例如:
mysqldump app_db > /backup/app_db_$(date +\%Y\%m\%d_\%H\%M).sql
这样文件名中就包含年月日时分,便于用 stat 或 basename + date -d 解析。避免依赖修改时间(mtime),因为传输、解压等操作会改变它;也不建议仅靠文件排序取“最老的几个”,容易因命名混乱出错。
按保留天数或数量精准筛选待删文件
常用两种策略,选一种并写清楚逻辑:
- 按天数保留:比如只留最近 7 天的备份。可用 find 配合 -mtime +7(注意:-mtime 是基于修改时间,若已统一用时间戳命名,更稳妥的是用 shell 循环+date -d 比较文件名中的日期)
- 按数量保留:比如最多保留 10 个备份文件。可用 ls -t | tail -n +11(按修改时间倒序列出,跳过前 10 个,剩下的就是该删的)
建议优先使用“按数量”策略——它不受系统时间跳变影响,也避免因跨月/闰年导致的计算偏差。
先预览再执行,加 dry-run 和日志记录
任何清理脚本上线前必须支持预览模式(dry-run)。在真正执行 rm 前,先用 echo 打印将要删除的文件列表:
- 加一个变量如 DryRun=true,所有 rm 行都改成 echo "Would delete: $file"
- 每次运行把输出重定向到日志,例如 > /var/log/backup_cleanup.log 2>&1
- 日志里记下时间、匹配规则、实际保留数/删除数,方便回溯
用 crontab 定期触发,并检查执行权限与路径
把脚本放入 /usr/local/bin/cleanup_backup.sh,赋予执行权限:
chmod +x /usr/local/bin/cleanup_backup.sh
再添加定时任务(例如每天凌晨 2 点运行):
- 编辑 root 的 crontab:sudo crontab -e
- 加入一行:0 2 * * * /usr/local/bin/cleanup_backup.sh
- 务必在脚本开头设置好 PATH(如 PATH=/usr/local/bin:/usr/bin:/bin),避免 cron 环境中找不到 date、find 等命令
- 脚本内所有路径用绝对路径,不要依赖当前工作目录











