Voltar ao 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.

Este post ainda não está no seu idioma; você o vê em espanhol. O código é o mesmo.

O 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 que está escrito assim

  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.
Como testar

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

Atenção

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.

Adapte ao seu caso com IA

O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.

O 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.

Exemplo escrito e revisado à mão.

Compartilhar

Comentários

Ainda não há comentários. O primeiro pode ser o seu.

Apenas texto, sem links. Não pedimos e-mail. Os comentários são revisados antes de serem publicados.

Adaptou para algo seu?

Me conte o que resolveu com isto, ou o que faltou.

Continue testando

Mais código

Ver todos
Darinel Ortega Online · respondo ao longo do dia
Hoje
Olá. Aqui eu não vendo nada: isto é para trocar conhecimento sobre tecnologia.
Escreva o que quiser — pode mandar texto, imagens ou documentos. As mensagens chegam ao meu console e eu respondo por lá.
Você está escrevendo fora do horário. Eu leio assim que o dia começar.

Conversa aberta para compartilhar conhecimento. As mensagens chegam ao meu console e eu respondo por lá.

Vamos marcar uma conversa

Escolha o dia e a hora que funcionem para você. Trinta minutos, sem discurso comercial.

Videochamada

Para uma videochamada, peça por aqui que eu te mando o link da sessão.