Criando Backups Automáticos de Pastas com Python
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
Abra o Agendador de Tarefas.
Crie uma nova tarefa.
Configure para rodar todos os dias no horário desejado.
Aponte para o
python.exee 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
Postar um comentário