Criando Backups Automáticos de Pastas com Python

Um dos maiores riscos no mundo digital é perder arquivos importantes por falhas no computador, exclusões acidentais ou ataques de vírus. Ter backups automáticos é uma forma de se proteger contra esses imprevistos e garantir que seus dados estarão sempre seguros.

Neste artigo, você vai aprender a criar um sistema de backup automático em Python, que copia os arquivos de uma pasta para outra, podendo ser executado manualmente ou agendado para rodar todos os dias.


🔹 1. Por que criar backups automáticos?

Antes de colocar a mão no código, é importante entender os benefícios de um backup automatizado:

  • ✅ Segurança: evita perda de dados por falhas ou ataques.

  • ✅ Praticidade: você não precisa lembrar de copiar os arquivos manualmente.

  • ✅ Velocidade: o script copia tudo de forma automática e organizada.

  • ✅ Controle: você pode definir onde salvar os backups e manter versões diferentes.


🔹 2. Bibliotecas que vamos usar

O Python possui bibliotecas nativas que facilitam o processo de backup:

  • os → manipular arquivos e diretórios.

  • shutil → copiar arquivos e pastas.

  • datetime → criar nomes únicos baseados na data/hora do backup.

Não é necessário instalar nada via pip, pois todas são padrão do Python.


🔹 3. Criando um backup simples de uma pasta

O código abaixo copia todos os arquivos de uma pasta para outra:

import shutil
import os

# Definindo as pastas
origem = "C:/MeusDocumentos"
destino = "C:/Backups"

# Criando a pasta de destino, se não existir
os.makedirs(destino, exist_ok=True)

# Copiando todos os arquivos
for arquivo in os.listdir(origem):
    caminho_arquivo = os.path.join(origem, arquivo)
    if os.path.isfile(caminho_arquivo):  # copia apenas arquivos
        shutil.copy(caminho_arquivo, destino)

print("✅ Backup concluído!")

🔎 Explicando:

  • os.listdir(origem) → lista todos os arquivos da pasta.

  • os.path.isfile() → garante que não vamos tentar copiar subpastas.

  • shutil.copy() → copia os arquivos para o destino.


🔹 4. Criando backups com data e hora

Para organizar melhor, podemos salvar cada backup em uma subpasta com a data e hora no nome.

import shutil
import os
from datetime import datetime

origem = "C:/MeusDocumentos"
destino = "C:/Backups"

# Nome da subpasta com data/hora
data_atual = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
destino_final = os.path.join(destino, f"backup_{data_atual}")

# Criar pasta do backup
os.makedirs(destino_final, exist_ok=True)

# Copiar todos os arquivos e subpastas
shutil.copytree(origem, destino_final)

print(f"✅ Backup criado em {destino_final}")

💡 Agora cada vez que rodar o script, será criada uma pasta diferente (backup_2025-10-03_11-30-00), permitindo histórico de versões.


🔹 5. Excluindo backups antigos (limpeza automática)

Se você não quiser que os backups ocupem muito espaço, pode manter apenas os últimos N backups.

import glob

# Mantém apenas os 5 backups mais recentes
backups = sorted(glob.glob(os.path.join(destino, "backup_*")), reverse=True)

for antigo in backups[5:]:  # deleta os mais antigos
    shutil.rmtree(antigo)
    print(f"🗑️ Backup removido: {antigo}")

🔹 6. Automatizando o backup diário

Você pode rodar o script manualmente, mas o ideal é automatizar.

🖥️ No Windows

  1. Abra o Agendador de Tarefas.

  2. Crie uma nova tarefa.

  3. Configure para rodar todos os dias no horário desejado.

  4. Aponte para o python.exe e passe como argumento o caminho do script.

🐧 No Linux/macOS

Use o cron:

crontab -e

E adicione, por exemplo, para rodar todo dia às 22h:

0 22 * * * /usr/bin/python3 /home/usuario/backup.py

🔹 7. Melhorando o backup (com logs e relatórios)

Você pode adicionar registros para acompanhar cada execução:

with open("log_backup.txt", "a") as log:
    log.write(f"{datetime.now()} - Backup criado em {destino_final}\n")

Também pode integrar com e-mail automático (usando smtplib) para receber uma notificação sempre que um backup for concluído.


🔹 8. Projeto final: Script completo de backup

Aqui está uma versão mais completa:

import shutil
import os
from datetime import datetime
import glob

# Pastas
origem = "C:/MeusDocumentos"
destino = "C:/Backups"

# Criar pasta destino
os.makedirs(destino, exist_ok=True)

# Criar pasta com data/hora
data_atual = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
destino_final = os.path.join(destino, f"backup_{data_atual}")

# Copiar tudo
shutil.copytree(origem, destino_final)
print(f"✅ Backup criado em {destino_final}")

# Limpar backups antigos (mantém 5)
backups = sorted(glob.glob(os.path.join(destino, "backup_*")), reverse=True)
for antigo in backups[5:]:
    shutil.rmtree(antigo)
    print(f"🗑️ Backup removido: {antigo}")

# Registrar log
with open("log_backup.txt", "a") as log:
    log.write(f"{datetime.now()} - Backup criado em {destino_final}\n")

🔹 9. Conclusão

Com esse projeto você aprendeu a:
✅ Criar backups automáticos de arquivos e pastas.
✅ Organizar versões com base em data e hora.
✅ Fazer limpeza automática de backups antigos.
✅ Integrar o script com agendadores do sistema para rodar sozinho.

Isso garante segurança, praticidade e tranquilidade em relação aos seus arquivos mais importantes.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Laços de Repetição em Python: Conceitos e Exemplos Práticos