linux定时备份与自动清理需组合备份脚本、find命令和cron任务:脚本按时间戳命名打包并存至指定目录;find按修改时间或保留数量精准清理旧备份;cron每日凌晨2点执行备份后清理,并建议加日志、权限控制及安全校验。

Linux 系统中实现定时备份并自动清理过期文件,核心在于组合使用 备份脚本 + find 命令 + cron 定时任务。关键不是“删得快”,而是“删得准”——确保只清理指定路径下、超过保留期限的旧备份,同时保留最新若干份或按时间阈值判断。
备份脚本:按日期命名 + 保留逻辑
先写一个基础备份脚本(如 /opt/scripts/backup.sh),把数据打包并带上时间戳:
- 用
date +%Y%m%d_%H%M生成唯一文件名,避免覆盖 - 压缩后保存到统一目录(如
/backup/webapp/) - 不直接删除旧文件,只负责“产出”,清理交给独立逻辑
示例片段:
#!/bin/bash BACKUP_DIR="/backup/webapp" DATE=$(date +%Y%m%d_%H%M) tar -czf "$BACKUP_DIR/app_$DATE.tar.gz" -C /var/www/html .
清理逻辑:用 find 按修改时间精准筛选
过期清理推荐用 find 而非 ls + head/tail,更可靠(尤其文件名含空格或特殊字符时):
-
find /backup/webapp -name "app_*.tar.gz" -mtime +7 -delete→ 删除 7 天前的备份 - 若需保留最近 5 个备份,可用
find ... -printf '%T@ %p\n' | sort -n | head -n -5 | cut -d' ' -f2- | xargs -r rm - 注意:
-mtime +7表示“修改时间早于 7×24 小时前”,不是“7 天整”
cron 定时执行:固定周期触发备份+清理
编辑 root 的 crontab(sudo crontab -e),让任务每天凌晨 2 点运行:
0 2 * * * /opt/scripts/backup.sh && find /backup/webapp -name "app_*.tar.gz" -mtime +7 -delete
- 用
&&保证先成功备份再清理,避免误删最后一份 - 建议加日志:末尾追加
>> /var/log/backup.log 2>&1 - 测试时可先用
echo替代rm或-delete,确认匹配结果无误
安全加固:防止误删与权限问题
生产环境务必加防护层:
- 备份目录设为
root:backup,权限750,普通用户无法写入或删改 - 脚本开头加校验:检查源目录是否存在、磁盘剩余空间是否 >10%,失败则退出并告警
- 清理前用
find ... -print输出待删列表到临时文件,人工抽检后再执行真实删除











