From 9fc41d6f305c5d56b03923cf3fa06e0162cdcfa3 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sun, 15 Feb 2026 04:25:56 -0800 Subject: [PATCH] Add asset backup script with zstd/pigz/gzip fallback --- tools/backup_assets.sh | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 tools/backup_assets.sh diff --git a/tools/backup_assets.sh b/tools/backup_assets.sh new file mode 100755 index 00000000..ea347f48 --- /dev/null +++ b/tools/backup_assets.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# +# Backup extracted WoW assets (Data/) to a compressed archive. +# Usage: ./tools/backup_assets.sh [DATA_DIR] [BACKUP_DIR] +# +# If not provided, the script will prompt for both paths. + +set -euo pipefail + +DEFAULT_DATA="./Data" +DEFAULT_BACKUP="$HOME/.local/share/wowee/backups" + +# --- Resolve data directory --- +DATA_DIR="${1:-}" +if [ -z "$DATA_DIR" ]; then + read -rp "Data directory to back up [$DEFAULT_DATA]: " DATA_DIR + DATA_DIR="${DATA_DIR:-$DEFAULT_DATA}" +fi + +if [ ! -d "$DATA_DIR" ]; then + echo "Error: Data directory not found: $DATA_DIR" >&2 + exit 1 +fi + +if [ ! -f "$DATA_DIR/manifest.json" ]; then + echo "Error: No manifest.json in $DATA_DIR — doesn't look like an extracted asset directory" >&2 + exit 1 +fi + +# --- Resolve backup directory --- +BACKUP_DIR="${2:-}" +if [ -z "$BACKUP_DIR" ]; then + read -rp "Backup destination [$DEFAULT_BACKUP]: " BACKUP_DIR + BACKUP_DIR="${BACKUP_DIR:-$DEFAULT_BACKUP}" +fi + +mkdir -p "$BACKUP_DIR" + +# --- Build archive name with timestamp --- +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +ARCHIVE="$BACKUP_DIR/wowee_assets_$TIMESTAMP.tar.zst" + +# --- Measure source size --- +DATA_SIZE=$(du -sh "$DATA_DIR" | cut -f1) +echo "Backing up $DATA_DIR ($DATA_SIZE) ..." +echo "Destination: $ARCHIVE" + +# --- Compress --- +if command -v zstd &>/dev/null; then + tar cf - -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" | zstd -T0 -3 -o "$ARCHIVE" +elif command -v pigz &>/dev/null; then + ARCHIVE="$BACKUP_DIR/wowee_assets_$TIMESTAMP.tar.gz" + tar cf - -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" | pigz -p "$(nproc)" > "$ARCHIVE" +else + ARCHIVE="$BACKUP_DIR/wowee_assets_$TIMESTAMP.tar.gz" + tar czf "$ARCHIVE" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" +fi + +ARCHIVE_SIZE=$(du -sh "$ARCHIVE" | cut -f1) +echo "Done: $ARCHIVE ($ARCHIVE_SIZE)"