esp/tools/make_backup.sh

37 lines
1.2 KiB
Bash

#!/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