本脚本目前主要用于备份我的世界,当然,作为通用脚本,可以灵活运用在不同的地方。
我的备份思路:
- 每天跑一次,先按“日备份”规则保留 15 天。
- 15 天以前的文件里,只保留“周一”的那份,其余删掉。
- 被保留下来的“周一”备份,再单独保存 6 个月(180 天),到期后删除。
- 文件名里带上星期几(%u,1=周一),方便脚本识别。
- 脚本使用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."使用方法
- 保存为
mc_backup.sh并chmod +x mc_backup.sh。 - crontab 里照旧每天执行一次,例如每天 4 点 30 分:
30 4 * * * /home/tianlingzi/bin/mc_backup.sh
脚本会自动完成“15 天内全留 → 仅留周一 → 周一 6 个月后删”的完整生命周期管理。