本脚本目前主要用于备份我的世界,当然,作为通用脚本,可以灵活运用在不同的地方。 ### 我的备份思路: 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.sh` 并 `chmod +x mc_backup.sh`。 2. crontab 里照旧每天执行一次,例如每天 4 点 30 分: `30 4 * * * /home/tianlingzi/bin/mc_backup.sh` 脚本会自动完成“15 天内全留 → 仅留周一 → 周一 6 个月后删”的完整生命周期管理。 Loading... 本脚本目前主要用于备份我的世界,当然,作为通用脚本,可以灵活运用在不同的地方。 ### 我的备份思路: 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.sh` 并 `chmod +x mc_backup.sh`。 2. crontab 里照旧每天执行一次,例如每天 4 点 30 分: `30 4 * * * /home/tianlingzi/bin/mc_backup.sh` 脚本会自动完成“15 天内全留 → 仅留周一 → 周一 6 个月后删”的完整生命周期管理。 最后修改:2025 年 10 月 25 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏