# Backup com Rsync e Rclone - Shell Script

**Gerado pelo ChatGPT**

Claro! Vou te mostrar um exemplo de shell script que usa `rsync` para fazer backup local e `rclone` para fazer backup em um serviço de armazenamento em nuvem. Esse script é útil para quem deseja manter backups locais e na nuvem com uma única execução.

<span style="background-color: rgb(206, 212, 217);">\### Exemplo de Script de Backup com `rsync` e `rclone`</span>

<span style="background-color: rgb(206, 212, 217);">Este script faz o backup de um diretório local para um local de backup e, em seguida, usa `rclone` para enviar o backup para um serviço de armazenamento em nuvem.</span>

<span style="background-color: rgb(206, 212, 217);">```bash</span>  
**<span style="background-color: rgb(206, 212, 217);">\#!/bin/bash</span>**

**<span style="background-color: rgb(206, 212, 217);">\# Configurações</span>**  
<span style="background-color: rgb(206, 212, 217);">SOURCE\_DIR="/caminho/do/diretorio/origem" # Diretório que você deseja fazer backup</span>  
<span style="background-color: rgb(206, 212, 217);">LOCAL\_BACKUP\_DIR="/caminho/do/backup/local" # Diretório onde o backup local será salvo</span>  
<span style="background-color: rgb(206, 212, 217);">RCLONE\_REMOTE="nome\_do\_remote:backup" # Configuração do rclone (ex: gdrive:backup)</span>

**<span style="background-color: rgb(206, 212, 217);">\# Data e hora atuais para adicionar aos nomes dos arquivos</span>**  
<span style="background-color: rgb(206, 212, 217);">now=$(date +"%Y-%m-%d\_%H-%M-%S")</span>

**<span style="background-color: rgb(206, 212, 217);">\# Nome do arquivo de backup</span>**  
<span style="background-color: rgb(206, 212, 217);">BACKUP\_FILE="backup\_$now.tar.gz"</span>

**<span style="background-color: rgb(206, 212, 217);">\# Função para verificar se um comando está disponível</span>**  
<span style="background-color: rgb(206, 212, 217);">check\_command() {</span>  
<span style="background-color: rgb(206, 212, 217);"> command -v "$1" &gt;/dev/null 2&gt;&amp;1 || { echo &gt;&amp;2 "O comando $1 não está instalado. Saindo."; exit 1; }</span>  
<span style="background-color: rgb(206, 212, 217);">}</span>

**<span style="background-color: rgb(206, 212, 217);">\# Verifica se rsync e rclone estão instalados</span>**  
<span style="background-color: rgb(206, 212, 217);">check\_command rsync</span>  
<span style="background-color: rgb(206, 212, 217);">check\_command rclone</span>

**<span style="background-color: rgb(206, 212, 217);">\# Cria o diretório de backup local, se não existir</span>**  
<span style="background-color: rgb(206, 212, 217);">mkdir -p "$LOCAL\_BACKUP\_DIR"</span>

**<span style="background-color: rgb(206, 212, 217);">\# Cria o backup local com rsync</span>**  
<span style="background-color: rgb(206, 212, 217);">echo "Iniciando backup local com rsync..."</span>  
<span style="background-color: rgb(206, 212, 217);">rsync -avzhP --delete "$SOURCE\_DIR/" "$LOCAL\_BACKUP\_DIR/"</span>  
<span style="background-color: rgb(206, 212, 217);">echo "Backup local concluído."</span>

**<span style="background-color: rgb(206, 212, 217);">\# Compacta o backup local</span>**  
<span style="background-color: rgb(206, 212, 217);">echo "Compactando o backup..."</span>  
<span style="background-color: rgb(206, 212, 217);">tar -czf "$LOCAL\_BACKUP\_DIR/$BACKUP\_FILE" -C "$LOCAL\_BACKUP\_DIR" "$(basename "$SOURCE\_DIR")"</span>  
<span style="background-color: rgb(206, 212, 217);">echo "Compactação concluída."</span>

**<span style="background-color: rgb(206, 212, 217);">\# Envia o backup para o serviço de armazenamento em nuvem usando rclone</span>**  
<span style="background-color: rgb(206, 212, 217);">echo "Enviando o backup para o armazenamento em nuvem com rclone..."</span>  
<span style="background-color: rgb(206, 212, 217);">rclone copy "$LOCAL\_BACKUP\_DIR/$BACKUP\_FILE" "$RCLONE\_REMOTE/"</span>  
<span style="background-color: rgb(206, 212, 217);">echo "Backup na nuvem concluído."</span>

**<span style="background-color: rgb(206, 212, 217);">\# Limpa arquivos de backup antigos, mantendo os últimos 5 backups</span>**  
<span style="background-color: rgb(206, 212, 217);">echo "Removendo backups antigos..."</span>  
<span style="background-color: rgb(206, 212, 217);">find "$LOCAL\_BACKUP\_DIR" -type f -name "backup\_\*.tar.gz" -mtime +30 -exec rm {} \\;</span>  
<span style="background-color: rgb(206, 212, 217);">echo "Limpeza concluída."</span>

**<span style="background-color: rgb(206, 212, 217);">\# Mensagem final</span>**  
<span style="background-color: rgb(206, 212, 217);">echo "Processo de backup completo. Arquivo de backup local em: $LOCAL\_BACKUP\_DIR/$BACKUP\_FILE"</span>  
<span style="background-color: rgb(206, 212, 217);">```</span>

**\### Como usar o script:**

1\. \*\*Crie o arquivo do script:\*\*  
 ```bash  
 nano backup\_script.sh  
 ```

2\. \*\*Cole o conteúdo do script no editor e salve o arquivo (Ctrl + X, depois Y, e Enter).\*\*

3\. \*\*Dê permissão de execução ao script:\*\*  
 ```bash  
 chmod +x backup\_script.sh  
 ```

4\. \*\*Execute o script:\*\*  
 ```bash  
 sudo ./backup\_script.sh  
 ```

**\### Explicação dos Comandos e Funções:**

\- \*\*`rsync -av --delete "$SOURCE\_DIR/" "$LOCAL\_BACKUP\_DIR/"`\*\*: Sincroniza o diretório de origem com o diretório de backup local. O `--delete` garante que os arquivos deletados no diretório de origem também sejam removidos do backup.  
\- \*\*`tar -czf "$LOCAL\_BACKUP\_DIR/$BACKUP\_FILE"`\*\*: Compacta o diretório de backup local em um arquivo `.tar.gz`.  
\- \*\*`rclone copy "$LOCAL\_BACKUP\_DIR/$BACKUP\_FILE" "$RCLONE\_REMOTE/"`\*\*: Envia o arquivo de backup compactado para o serviço de armazenamento em nuvem configurado no `rclone`.  
\- \*\*`find "$LOCAL\_BACKUP\_DIR" -type f -name "backup\_\*.tar.gz" -mtime +30 -exec rm {} \\;`\*\*: Remove backups locais antigos, mantendo apenas os últimos 30 dias de backups.

**\### Configuração do `rclone`:**

1\. \*\*Instale o `rclone`:\*\*  
 ```bash  
 sudo apt-get install rclone  
 ```

2\. \*\*Configure o `rclone`:\*\*  
 ```bash  
 rclone config  
 ```  
 Siga as instruções para configurar o `rclone` para o serviço de armazenamento em nuvem de sua escolha.

3\. \*\*Verifique a configuração do `rclone`:\*\*  
 ```bash  
 rclone ls nome\_do\_remote:  
 ```

Substitua os caminhos e nomes conforme necessário para se adequar ao seu ambiente. Se precisar de mais ajustes ou tiver perguntas, estou à disposição!