40 lines
1.1 KiB
Bash
40 lines
1.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Absolutní cesta ke skriptu
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
CONTAINER="mc-vanilla"
|
|
BACKUP_DIR="/mnt/backups/minecraft_backups/frankstein"
|
|
WORLD_DIR="$DIR/data/world"
|
|
|
|
DATE_FULL=$(date +%F_%H-%M)
|
|
DATE_HOUR=$(date +%F_%H)
|
|
DATE_DAY=$(date +%F)
|
|
|
|
ARCHIVE_NAME="$BACKUP_DIR/world_$DATE_FULL.tar.gz"
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Zakázání ukládání ve hře
|
|
docker exec -i $CONTAINER rcon-cli save-off
|
|
docker exec -i $CONTAINER rcon-cli save-all
|
|
sleep 3
|
|
|
|
# Vytvoření zálohy
|
|
tar -czf "$ARCHIVE_NAME" "$WORLD_DIR"
|
|
|
|
# Znovupovolení ukládání
|
|
docker exec -i $CONTAINER rcon-cli save-on
|
|
|
|
# Smazání všech záloh ze stejné hodiny, kromě nejnovější
|
|
find "$BACKUP_DIR" -name "world_${DATE_HOUR}_*.tar.gz" ! -newer "$ARCHIVE_NAME" -delete
|
|
|
|
# Zachování pouze nejnovější zálohy z každého předchozího dne
|
|
find "$BACKUP_DIR" -name "world_*.tar.gz" | while read file; do
|
|
file_day=$(basename "$file" | cut -d'_' -f2)
|
|
newest=$(find "$BACKUP_DIR" -name "world_${file_day}_*.tar.gz" | sort | tail -n 1)
|
|
if [ "$file" != "$newest" ]; then
|
|
rm "$file"
|
|
fi
|
|
done
|