Volver al código Bash

Respaldo diario que se verifica y borra los viejos

Comprime una carpeta con fecha, comprueba que el archivo se puede leer y conserva solo los últimos siete días.

El problema

Un respaldo que nadie verifica es una suposición, y uno que nunca se borra llena el disco. El script tiene que hacer las dos cosas solo.

Bash
#!/usr/bin/env bash
set -euo pipefail

ORIGEN="${1:?Uso: respaldo.sh carpeta_origen carpeta_destino}"
DESTINO="${2:?Falta la carpeta de destino}"
DIAS=7

mkdir -p "$DESTINO"
archivo="$DESTINO/respaldo-$(date +%Y%m%d-%H%M%S).tar.gz"

tar -czf "$archivo" -C "$(dirname "$ORIGEN")" "$(basename "$ORIGEN")"
tar -tzf "$archivo" > /dev/null          # si no se puede listar, no es un respaldo

find "$DESTINO" -name 'respaldo-*.tar.gz' -mtime +"$DIAS" -delete
echo "Listo: $archivo ($(du -h "$archivo" | cut -f1)). Se conservan $DIAS días."

Por qué está escrito así

  1. set -euo pipefail hace que el script se detenga ante cualquier error en vez de seguir como si nada.
  2. ${1:?mensaje} corta con una explicación si falta el argumento.
  3. tar -tzf vuelve a leer el archivo recién creado: si está corrupto, el script falla ahí y no borra los respaldos viejos.
  4. El find borra solo lo que coincide con el patrón del propio script y tiene más de siete días.
Cómo probarlo

chmod +x respaldo.sh y corré: ./respaldo.sh /ruta/a/datos /ruta/a/respaldos. Para programarlo: una línea en crontab.

Ojo con esto

Guardar el respaldo en el mismo disco que los datos protege de un borrado accidental, no de una falla del disco ni de un ransomware. La copia que vale está en otro lado.

Adaptalo a tu caso con IA

El botón copia este prompt con el código pegado debajo. Reemplazá los corchetes con lo tuyo y pegalo en ChatGPT, Claude, Gemini o Copilot.

El prompt
Tengo este script de respaldo en Bash. Agregale: copia del archivo a [DESTINO REMOTO: otro servidor por rsync, un bucket S3, etc.], un aviso a [CANAL: correo, webhook de Slack] solo cuando falla, y un archivo de registro con fecha y tamaño de cada respaldo. Corre en [SISTEMA OPERATIVO] con cron. Que siga deteniéndose ante cualquier error.

Ejemplo escrito y revisado a mano.

Compartir

Comentarios

Todavía no hay comentarios. El primero puede ser el tuyo.

Solo texto, sin enlaces. No se pide correo. Los comentarios se revisan antes de publicarse.

¿Lo adaptaste a algo tuyo?

Contame qué resolviste con esto, o qué le faltó.

Seguí probando

Más código

Ver todos
Darinel Ortega En línea · respondo durante el día
Hoy
Hola. Acá no vendo nada: esto es para intercambiar conocimiento sobre tecnología.
Escribime lo que quieras — podés mandar texto, imágenes o documentos. Los mensajes llegan a mi consola y te respondo desde ahí.
Estás escribiendo fuera de horario. Te leo apenas empiece el día.

Conversación abierta para compartir conocimiento. Los mensajes llegan a mi consola y respondo desde ahí.

Agendemos una conversación

Elegí el día y la hora que te sirvan. Son treinta minutos, sin agenda comercial.

Videollamada

Para una videollamada, pedila por acá y te paso el enlace de la sesión.