Ir para o conteúdo

Backup espelhado.sh

De RJGSWiki
Revisão de 11h42min de 14 de fevereiro de 2026 por Rjgs (discussão | contribs) (Criou página com 'Backup feito com o rsync para espelhar a pasta destino com a origem. '''CUIDADO:''' Esse script pode apagar arquivos e diretórios essenciais no destino Crie o arquivo vim backup_espelhado.sh Cole o conteúdo abaixo: <pre> #!/bin/bash ######################################################################### # NOME...: Robison Joel # DATA...: 28/04/2022 | Revisão: 16/02/2025 # ASSUNTO: Backup espelhado com rsync ##################################################...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Backup feito com o rsync para espelhar a pasta destino com a origem.

CUIDADO: Esse script pode apagar arquivos e diretórios essenciais no destino

Crie o arquivo

vim backup_espelhado.sh

Cole o conteúdo abaixo:

#!/bin/bash

#########################################################################
# NOME...: Robison Joel
# DATA...: 28/04/2022 | Revisão: 16/02/2025
# ASSUNTO: Backup espelhado com rsync
#########################################################################

set -euo pipefail

### VARIÁVEIS ###
LOG="bckp_log_$(date +%Y-%m-%d_%H-%M-%S).log"
RSYNC_OPTS="-avh --delete --progress"

### ENTRADA DE DADOS ###
read -rp "### Insira a pasta de origem: " DE_ONDE
read -rp "### Insira a pasta de destino: " PRA_ONDE

### VALIDAÇÕES ###
if [[ ! -d "$DE_ONDE" ]]; then
  echo "ERRO: Diretório de origem não existe." | tee -a "$LOG"
  exit 1
fi

if [[ ! -d "$PRA_ONDE" ]]; then
  echo "ERRO: Diretório de destino não existe." | tee -a "$LOG"
  exit 1
fi

echo "#################################################" | tee "$LOG"
echo "### Iniciando o backup (DRY-RUN)..." | tee -a "$LOG"
echo "#################################################" | tee -a "$LOG"

### DRY-RUN ###
rsync $RSYNC_OPTS --dry-run "$DE_ONDE"/ "$PRA_ONDE"/ | tee -a "$LOG"

echo
read -rp "Deseja executar o backup real? (s/N): " CONFIRMA
[[ "$CONFIRMA" =~ ^[Ss]$ ]] || { echo "Backup cancelado." | tee -a "$LOG"; exit 0; }

echo "#################################################" | tee -a "$LOG"
echo "### Executando backup real..." | tee -a "$LOG"
echo "#################################################" | tee -a "$LOG"

### BACKUP REAL ###
rsync $RSYNC_OPTS "$DE_ONDE"/ "$PRA_ONDE"/ | tee -a "$LOG"

echo "#################################################" | tee -a "$LOG"
echo "### Verificação de tamanhos" | tee -a "$LOG"

### TAMANHOS (em bytes, para comparação correta)
TAMANHO_ORIGEM=$(du -sb "$DE_ONDE" | awk '{print $1}')
TAMANHO_DESTINO=$(du -sb "$PRA_ONDE" | awk '{print $1}')

echo "Origem : $(du -sh "$DE_ONDE" | awk '{print $1}')" | tee -a "$LOG"
echo "Destino: $(du -sh "$PRA_ONDE" | awk '{print $1}')" | tee -a "$LOG"

DIFERENCA=$(( TAMANHO_ORIGEM - TAMANHO_DESTINO ))

echo "Diferença em bytes: $DIFERENCA" | tee -a "$LOG"

if [[ "$DIFERENCA" -eq 0 ]]; then
  echo "STATUS: Backup consistente ✔" | tee -a "$LOG"
else
  echo "STATUS: Atenção — tamanhos divergentes ⚠" | tee -a "$LOG"
fi

echo "Backup finalizado em $(date)" | tee -a "$LOG"

Após salvar e sair, conceda permissões para o arquivo:

sudo chmod +x backup_espelhado.sh

Para executar:

./backup_espelhado.sh