Kelsidavis-WoWee/tools/backup_assets.sh
Kelsi f66b9eb154 Fix macOS build process and make shell scripts cross-platform
- Add vulkan-loader, vulkan-headers, shaderc to macOS CI brew install
- Add vulkan-loader and shaderc to macOS PKG_CONFIG_PATH
- Replace Linux-only `nproc` with portable fallback in build.sh,
  rebuild.sh, extract_assets.sh, and tools/backup_assets.sh
- Replace `ldconfig` StormLib check with portable detection
  (ldconfig, pkg-config, brew lib) in extract_assets.sh
- Update BUILD_INSTRUCTIONS.md macOS section with vulkan/shaderc
  packages and MoltenVK explanation
- Add macOS prerequisites to README.md
2026-02-23 18:35:53 -08:00

61 lines
1.9 KiB
Bash
Executable file

#!/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"
NPROC=$(nproc 2>/dev/null || sysctl -n hw.logicalcpu 2>/dev/null || echo 4)
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)"