#!/usr/bin/env bash set -euo pipefail umask 002 # Determinar raíz del proyecto (dos niveles arriba de este script) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="${SCRIPT_DIR%/tools}" BACKUPS_DIR="${ROOT_DIR}/backups" mkdir -p "$BACKUPS_DIR" || { echo "ERROR: No se pudo crear $BACKUPS_DIR"; exit 1; } chmod 775 "$BACKUPS_DIR" >/dev/null 2>&1 || true if [ ! -w "$BACKUPS_DIR" ]; then echo "ERROR: Sin permisos de escritura en $BACKUPS_DIR. Ajustá ownership/permisos para el usuario del servidor web." exit 1 fi TS="$(date +%Y%m%d_%H%M%S)" OUT_ZIP="${BACKUPS_DIR}/backup_${TS}.zip" # Verificar que 'zip' esté disponible; si no, intentar tar.gz if command -v zip >/dev/null 2>&1; then cd "$ROOT_DIR" # Excluir directorios comunes que no queremos incluir zip -r "$OUT_ZIP" . \ -x "*/.git/*" \ -x "backups/*" \ -x "*/node_modules/*" \ -x "*/vendor/*" \ -x "*.zip" echo "OK: ZIP generado en $OUT_ZIP" else OUT_TGZ="${BACKUPS_DIR}/backup_${TS}.tar.gz" cd "$ROOT_DIR" tar --exclude="./.git" --exclude="./backups" --exclude="./node_modules" --exclude="./vendor" -czf "$OUT_TGZ" . echo "OK: TAR.GZ generado en $OUT_TGZ (zip no disponible)" fi