#!/usr/bin/env python3 from pathlib import Path import hashlib import argparse import sys parser = argparse.ArgumentParser( description="Confronta i file JS, CSS e HTML della cartella corrente " "con un'altra cartella specificata come parametro." ) parser.add_argument( "altra_cartella", help="Percorso della cartella da confrontare con quella corrente" ) args = parser.parse_args() old = Path(".").resolve() new = Path(args.altra_cartella).expanduser().resolve() if not old.is_dir(): sys.exit(f"ERRORE: cartella corrente non valida: {old}") if not new.is_dir(): sys.exit(f"ERRORE: cartella inesistente: {new}") exts = {".js", ".mjs", ".cjs", ".jsx", ".css", ".html", ".htm"} excluded = { "node_modules", ".git", ".venv", ".venv-clustering", "var", "native", "coverage", "dist", "build" } def collect(root): result = {} for p in root.rglob("*"): if not p.is_file() or p.suffix.lower() not in exts: continue rel = p.relative_to(root) if any(part in excluded or part.startswith("backup-") for part in rel.parts): continue result[str(rel)] = p return result a = collect(old) b = collect(new) added = sorted(b.keys() - a.keys()) removed = sorted(a.keys() - b.keys()) common = sorted(a.keys() & b.keys()) modified = [ f for f in common if hashlib.sha256(a[f].read_bytes()).digest() != hashlib.sha256(b[f].read_bytes()).digest() ] print(f"\nCARTELLA CORRENTE: {old}") print(f"ALTRA CARTELLA: {new}") print(f"\nAGGIUNTI nella cartella corrente: {len(removed)}") for f in removed: print(" +", f) print(f"\nASSENTI dalla cartella corrente: {len(added)}") for f in added: print(" -", f) print(f"\nMODIFICATI: {len(modified)}") for f in modified: print(" *", f) Path("/tmp/s184js-modificati.txt").write_text( "\n".join(modified) + ("\n" if modified else ""), encoding="utf-8" ) print("\nElenco dei modificati salvato in /tmp/s184js-modificati.txt")