import os import pymysql import sys # ============================== # ⚙️ NASTAVENÍ # ============================== LOCAL_ROOT = r"U:\#Syncthing" # Cíl, kam to chceš nahrát (pro kontrolu přesné shody) TARGET_SUBFOLDER = "Porno" REMOTE_SHARE_KEY = "#ColdData" # DB Nastavení DB_HOST = "192.168.1.76" DB_PORT = 3307 DB_USER = "root" DB_PASS = "Vlado9674+" DB_NAME = "torrents" DB_TABLE = "file_md5_index" # ============================== def get_db_connection(): try: return pymysql.connect( host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASS, database=DB_NAME, cursorclass=pymysql.cursors.DictCursor ) except Exception as e: sys.exit(f"❌ Chyba DB: {e}") def normalize_path(path): return path.replace("\\", "/").lower() def main(): print(f"🚀 KŘÍŽOVÁ KONTROLA (Co nahrát vs. Co už někde je)") print("=====================================================") # 1. NAČÍST CELOU DB (pro hledání zatoulaných souborů) print("📡 Stahuji kompletní index serveru (Jméno + Velikost)...") # Mapa: (jmeno, velikost) -> [seznam cest] global_map = {} conn = get_db_connection() with conn.cursor() as cursor: # Stáhneme vše z #ColdData sql = f"SELECT file_name, file_size, full_path FROM {DB_TABLE} WHERE full_path LIKE %s" cursor.execute(sql, (f"%/{REMOTE_SHARE_KEY}/%",)) rows = cursor.fetchall() for row in rows: fname = row['file_name'].lower() size = row['file_size'] path = row['full_path'] key = (fname, size) if key not in global_map: global_map[key] = [] global_map[key].append(path) print(f"✅ Index načten ({len(rows):,} souborů).") # 2. DEFINICE CÍLOVÉ CESTY (pro kontrolu přesné shody) # Cesta v DB vypadá např: /mnt/disk1/#ColdData/Porno/Slozka/Film.avi # My budeme kontrolovat, jestli soubor už je v "cílové logické cestě" target_pattern_part = f"/{REMOTE_SHARE_KEY}/{TARGET_SUBFOLDER}/".lower() # 3. SKENOVÁNÍ LOKÁLNÍHO DISKU print(f"📂 Skenuji {LOCAL_ROOT} a třídím...") count_upload = 0 count_move = 0 count_ok = 0 f_upload = open("1_NAHRAT_NA_SERVER.txt", "w", encoding="utf-8") f_move = open("2_JIZ_EXISTUJI_JINDE.txt", "w", encoding="utf-8") f_upload.write("TOTO JSOU DATA, KTERÁ NA SERVERU VŮBEC NEJSOU:\n") f_move.write("TOTO NAHRAJEŠ ZBYTEČNĚ (Už to tam je, ale v jiné složce):\n") for root, dirs, files in os.walk(LOCAL_ROOT): if ".stfolder" in dirs: dirs.remove(".stfolder") if ".stversions" in dirs: dirs.remove(".stversions") for filename in files: fname_lower = filename.lower() local_full_path = os.path.join(root, filename) try: local_size = os.path.getsize(local_full_path) # Relativní cesta, kam bys to nahrál (např. Herci/Film.avi) rel_path = os.path.relpath(local_full_path, LOCAL_ROOT) clean_rel_path = normalize_path(rel_path) except OSError: continue key = (fname_lower, local_size) # --- LOGIKA ROZHODOVÁNÍ --- if key in global_map: # Soubor (stejné jméno a velikost) na serveru EXISTUJE. # Otázka je: Je ve správné složce? server_paths = global_map[key] is_in_target = False # Zkontrolujeme, zda alespoň jedna cesta na serveru odpovídá té, kam to chceš nahrát # Tedy jestli obsahuje /#ColdData/Porno/ + tvoji relativní cestu # Hledaný koncový řetězec: "porno/herci/film.avi" target_suffix = f"{TARGET_SUBFOLDER}/{clean_rel_path}".lower() for path in server_paths: if path.lower().endswith(target_suffix): is_in_target = True break if is_in_target: # Je to tam, kde to má být. count_ok += 1 else: # Je to na serveru, ale JINDE. count_move += 1 f_move.write(f"SOUBOR: {clean_rel_path}\n") f_move.write(f" >>> Nalezen jinde: {server_paths[0]}\n") else: # Na serveru není vůbec (ani jinde). count_upload += 1 f_upload.write(f"{local_full_path}\n") if (count_upload + count_move + count_ok) % 1000 == 0: print(f" ... zpracováno {count_upload + count_move + count_ok} ...", end="\r") f_upload.close() f_move.close() print("\n\n📊 FINÁLNÍ REPORT") print("=====================================================") print(f"✅ UŽ TAM JE (Správně): {count_ok:,}") print(f"📦 UŽ TAM JE (Ale jinde): {count_move:,} -> Koukni do 2_JIZ_EXISTUJI_JINDE.txt") print(f"🚀 MUSÍŠ NAHRÁT (Nové): {count_upload:,} -> Seznam v 1_NAHRAT_NA_SERVER.txt") print("=====================================================") if __name__ == "__main__": main()