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. 

 ### Exemplo de Script de Backup com `rsync` e `rclone` 

 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. 

 ```bash #!/bin/bash 

 # Configurações SOURCE_DIR="/caminho/do/diretorio/origem"  # Diretório que você deseja fazer backup LOCAL_BACKUP_DIR="/caminho/do/backup/local"  # Diretório onde o backup local será salvo RCLONE_REMOTE="nome_do_remote:backup"  # Configuração do rclone (ex: gdrive:backup) 

 # Data e hora atuais para adicionar aos nomes dos arquivos now=$(date +"%Y-%m-%d_%H-%M-%S") 

 # Nome do arquivo de backup BACKUP_FILE="backup_$now.tar.gz" 

 # Função para verificar se um comando está disponível check_command() {     command -v "$1" >/dev/null 2>&1 || { echo >&2 "O comando $1 não está instalado. Saindo."; exit 1; } } 

 # Verifica se rsync e rclone estão instalados check_command rsync check_command rclone 

 # Cria o diretório de backup local, se não existir mkdir -p "$LOCAL_BACKUP_DIR" 

 # Cria o backup local com rsync echo "Iniciando backup local com rsync..." rsync -avzhP --delete "$SOURCE_DIR/" "$LOCAL_BACKUP_DIR/" echo "Backup local concluído." 

 # Compacta o backup local echo "Compactando o backup..." tar -czf "$LOCAL_BACKUP_DIR/$BACKUP_FILE" -C "$LOCAL_BACKUP_DIR" "$(basename "$SOURCE_DIR")" echo "Compactação concluída." 

 # Envia o backup para o serviço de armazenamento em nuvem usando rclone echo "Enviando o backup para o armazenamento em nuvem com rclone..." rclone copy "$LOCAL_BACKUP_DIR/$BACKUP_FILE" "$RCLONE_REMOTE/" echo "Backup na nuvem concluído." 

 # Limpa arquivos de backup antigos, mantendo os últimos 5 backups echo "Removendo backups antigos..." find "$LOCAL_BACKUP_DIR" -type f -name "backup_*.tar.gz" -mtime +30 -exec rm {} \; echo "Limpeza concluída." 

 # Mensagem final echo "Processo de backup completo. Arquivo de backup local em: $LOCAL_BACKUP_DIR/$BACKUP_FILE" ``` 

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