#!/usr/bin/env bash set -euo pipefail # Pack local folders into tar archives on NAS, then optionally remove local source. # Default mode is DRY-RUN. # # Example: # scripts/ops/netgescon-pack-to-nas.sh \ # --nas-dir /mnt/nas_netgescon/migrazioni-locali/tar-exports \ # --source /home/michele/backup-completo \ # --source /var/www/netgescon_OLD # # scripts/ops/netgescon-pack-to-nas.sh \ # --nas-dir /mnt/nas_netgescon/migrazioni-locali/tar-exports \ # --source /home/michele/backup-completo \ # --apply --purge-source NAS_DIR="/mnt/nas_netgescon/migrazioni-locali/tar-exports" APPLY="no" PURGE_SOURCE="no" TS="$(date +%Y%m%d-%H%M%S)" declare -a SOURCES=() die() { echo "Error: $*" >&2 exit 1 } usage() { cat <<'EOF' Usage: netgescon-pack-to-nas.sh --source [--source ...] [options] Options: --source Source directory to archive (repeatable) --nas-dir Destination folder on NAS for tar files --apply Create archives (default is dry-run) --purge-source Delete local source directory after successful archive -h, --help Show help EOF } while [[ $# -gt 0 ]]; do case "$1" in --source) SOURCES+=("$2") shift 2 ;; --nas-dir) NAS_DIR="$2" shift 2 ;; --apply) APPLY="yes" shift ;; --purge-source) PURGE_SOURCE="yes" shift ;; -h|--help) usage exit 0 ;; *) usage die "Unknown option: $1" ;; esac done [[ ${#SOURCES[@]} -gt 0 ]] || { usage; die "At least one --source is required"; } [[ -d "$NAS_DIR" ]] || mkdir -p "$NAS_DIR" if [[ "$PURGE_SOURCE" == "yes" && "$APPLY" != "yes" ]]; then die "--purge-source requires --apply" fi echo "== NetGescon Pack to NAS ==" echo "Mode: $( [[ "$APPLY" == "yes" ]] && echo "APPLY" || echo "DRY-RUN" )" echo "Purge source: $PURGE_SOURCE" echo "NAS dir: $NAS_DIR" echo for src in "${SOURCES[@]}"; do if [[ ! -d "$src" ]]; then echo "Skip missing source: $src" continue fi src_abs="$(readlink -f "$src")" parent_abs="$(dirname "$src_abs")" src_name="$(basename "$src_abs")" parent_name="$(basename "$parent_abs")" safe_name="${parent_name}__${src_name}__${TS}.tar" tar_path="$NAS_DIR/$safe_name" echo "------------------------------------------------------------" echo "Source: $src_abs" echo "Archive: $tar_path" du -sh "$src_abs" || true if [[ "$APPLY" == "yes" ]]; then tar -cpf "$tar_path" -C "$parent_abs" "$src_name" sync ls -lh "$tar_path" if [[ "$PURGE_SOURCE" == "yes" ]]; then echo "[PURGE] Removing source: $src_abs" rm -rf "$src_abs" fi fi done echo "Done."