shutil reúne operaciones de filesystem de alto nivel para copiar, mover, eliminar árboles y crear archivos comprimidos. La comodidad no elimina riesgos: un destino puede sobrescribirse y los metadatos no son totalmente portables.
from pathlib import Path
from shutil import copy2, make_archive
origem = Path("relatorios")
backup = Path("backup")
backup.mkdir(exist_ok=True)
for arquivo in origem.glob("*.csv"):
copy2(arquivo, backup / arquivo.name)
make_archive("backup-relatorios", "zip", root_dir=backup)
copy2() intenta conservar más metadatos que copy(), pero propietario, ACL y atributos del sistema pueden perderse. make_archive() crea formatos ZIP o tar desde una raíz. Verifica el resultado y prueba la restauración, porque crear un backup no garantiza que sea recuperable.
Buenas prácticas
Resuelve y valida rutas antes de operaciones destructivas. No pases destinos controlados por usuarios directamente a rmtree(), move() o extracción. Inspecciona miembros no confiables y usa filtros seguros compatibles con tu versión. Para reemplazo atómico, escribe primero en un destino temporal.
Usa pathlib para construir rutas y la guía de automatización con Python para estructurar scripts repetibles.
La documentación oficial de shutil, consultada el 22 de julio de 2026, detalla la API y sus límites.