You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何自动删除服务器中3天前的备份文件并配置Cron任务

解决自动删除3天前备份文件及Cron定时配置问题

一、问题根源分析

你之前的find命令失效,大概率是两个原因:

  • 依赖文件修改时间-mtime判断,但如果备份文件的修改时间和命名日期不一致(比如后期移动过文件),就会出现误判
  • 命令范围太宽泛,没有精准匹配web_dd_mm_yyyy格式的备份文件,甚至路径/类型判断有误

二、可靠的删除方案(基于文件名日期)

因为你的备份文件名包含明确的日期,直接基于文件名判断比依赖文件属性更精准,避免时间戳不准的问题:

1. 创建清理脚本

新建clean_old_backups.sh文件,写入以下内容:

#!/bin/bash
# 备份文件所在目录,根据实际路径修改
BACKUP_DIR="/home"
# 生成3天前的日期,格式和备份文件名一致:dd_mm_yyyy
THREE_DAYS_AGO=$(date -d "3 days ago" +%d_%m_%Y)

# 遍历目录下所有web_开头的备份文件
for file in "$BACKUP_DIR"/web_*; do
    # 提取文件名中的日期部分
    FILE_DATE=$(echo "$file" | sed -n 's/.*web_\([0-9][0-9]_[0-9][0-9]_[0-9]\{4\}\).*/\1/p')
    if [ -n "$FILE_DATE" ]; then
        # 比较日期,若文件日期早于3天前则删除
        if [[ "$FILE_DATE" < "$THREE_DAYS_AGO" ]]; then
            rm -f "$file"
            echo "[$(date)] Deleted: $file" >> /var/log/clean_backups.log
        fi
    fi
done

2. 赋予脚本执行权限

chmod +x /path/to/clean_old_backups.sh

替换/path/to/为你实际存放脚本的路径

三、基于文件修改时间的修复方案(仅当mtime准确时用)

如果你的备份文件修改时间和备份日期完全一致,修正后的find命令如下:

# 精准匹配web_开头的文件,删除3天前的
find /home -type f -name "web_*" -mtime +3 -delete

或者用兼容性更好的exec写法:

find /home -type f -name "web_*" -mtime +3 -exec rm -f {} +

必须加-name "web_*",避免误删/home目录下的其他无关文件

四、配置Cron定时执行

1. 编辑Cron任务

执行命令打开Cron编辑器:

crontab -e

2. 添加定时规则

比如设置每天凌晨2点自动执行,添加以下内容:

0 2 * * * /path/to/clean_old_backups.sh

如果需要记录执行日志,改成:

0 2 * * * /path/to/clean_old_backups.sh >> /var/log/clean_backups.log 2>&1

规则说明:0 2 * * * 代表分、时、日、月、周,即每天凌晨2点整执行

五、验证方法

  • 手动执行脚本测试:/path/to/clean_old_backups.sh,查看日志或目录确认是否删除目标文件
  • 创建测试文件web_17_10_2022(确保日期早于3天前),运行脚本验证删除逻辑
  • 查看Cron日志(通常在/var/log/cron或/var/log/syslog)确认定时任务是否正常触发

内容的提问来源于stack exchange,提问作者Sambath Raji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:20:16