creat script

This commit is contained in:
2026-02-08 13:37:00 +01:00
parent 9620a0a695
commit 46aed1f13d
2 changed files with 80 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
import os
import time
import shutil
import hashlib
from datetime import datetime
from files import FILES
CHECK_INTERVAL = 60 # segundos
def sha256sum(path):
"""Devuelve el hash SHA256 del fichero."""
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
h.update(chunk)
return h.hexdigest()
def ensure_backup_dir(file_path):
"""Crea backup/<nombre_sin_ext>/ si no existe."""
file_name = os.path.basename(file_path)
name, _ = os.path.splitext(file_name)
backup_dir = os.path.join("backup", name)
os.makedirs(backup_dir, exist_ok=True)
return backup_dir
def get_latest_backup(file_path):
"""Devuelve la ruta del backup más reciente o None si no hay."""
backup_dir = ensure_backup_dir(file_path)
files = sorted(os.listdir(backup_dir), reverse=True)
if not files:
return None
return os.path.join(backup_dir, files[0])
def backup_file(file_path):
"""Crea una copia con timestamp."""
backup_dir = ensure_backup_dir(file_path)
file_name = os.path.basename(file_path)
name, ext = os.path.splitext(file_name)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
dest = os.path.join(backup_dir, f"{name}_{timestamp}{ext}")
shutil.copy2(file_path, dest)
print(f"[BACKUP] Copia creada: {dest}")
def process_file(file_path):
"""Comprueba si hay cambios y crea backup si es necesario."""
if not os.path.isfile(file_path):
print(f"[WARN] No existe: {file_path}")
return
latest = get_latest_backup(file_path)
if latest is None:
print(f"[INIT] No hay copia previa de {file_path}, creando primera copia...")
backup_file(file_path)
return
# Comparamos hashes
current_hash = sha256sum(file_path)
latest_hash = sha256sum(latest)
if current_hash != latest_hash:
print(f"[CHANGE] Detectado cambio en {file_path}, creando nueva copia...")
backup_file(file_path)
else:
print(f"[OK] Sin cambios en {file_path}")
def main():
print("Iniciando watcher de saves...")
while True:
for f in FILES:
process_file(f)
time.sleep(CHECK_INTERVAL)
if __name__ == "__main__":
main()