本脚本目前主要用于备份我的世界,当然,作为通用脚本,可以灵活运用在不同的地方。

我的备份思路:

  1. 每天跑一次,先按“日备份”规则保留 15 天。
  2. 15 天以前的文件里,只保留“周一”的那份,其余删掉。
  3. 被保留下来的“周一”备份,再单独保存 6 个月(180 天),到期后删除。
  4. 文件名里带上星期几(%u,1=周一),方便脚本识别。
  5. 脚本使用cron在每天无人使用的时候执行。
#!/bin/bash
# 每天备份 MC 世界,保留策略:
#   1. 普通日备份保留 15 天;
#   2. 15 天前只留周一那份,其余删除;
#   3. 被留存的周一备份再保存 6 个月(180 天),到期删除。
set -e

############## 可改路径 ##############
SRC_DIR="/path to/mc-server/worlds"     #需要备份的文件夹,请根据实际情况自行设置
DST_DIR="/path to/MC/backups"           #备份文件保存路径,请根据实际情况自行设置
#####################################

DAYS_KEEP_DAILY=15        # 普通日备份保留天数
DAYS_KEEP_MONDAY=180      # 周一备份额外保留天数

mkdir -p "$DST_DIR"

# 1. 生成备份文件名(含星期,1=周一)
TS=$(date +%F_%H%M%S)
WEEKDAY=$(date +%u)
FILE="world-${TS}-wk${WEEKDAY}.tar.gz"

# 2. 打包
tar -czf "$DST_DIR/$FILE" -C "$SRC_DIR" .
logger "MC world backup: $FILE created."

# 3. 清理普通日备份(保留 15 天)
find "$DST_DIR" -type f -name 'world-*-wk[0-7].tar.gz' -mtime +${DAYS_KEEP_DAILY} -exec rm -f {} \;

# 4. 清理“非周一”的过期备份(15 天前且 weekday != 1)
find "$DST_DIR" -type f -name 'world-*-wk[2-7].tar.gz' -mtime +${DAYS_KEEP_DAILY} -exec rm -f {} \;

# 5. 清理 6 个月前的周一备份
find "$DST_DIR" -type f -name 'world-*-wk1.tar.gz' -mtime +${DAYS_KEEP_MONDAY} -exec rm -f {} \;

logger "MC world backup: old backups cleaned."

使用方法

  1. 保存为 mc_backup.shchmod +x mc_backup.sh
  2. crontab 里照旧每天执行一次,例如每天 4 点 30 分:
    30 4 * * * /home/tianlingzi/bin/mc_backup.sh

脚本会自动完成“15 天内全留 → 仅留周一 → 周一 6 个月后删”的完整生命周期管理。

最后修改:2026 年 08 月 11 日
如果觉得我的文章对你有用,请随意赞赏