z230
This commit is contained in:
152
TestDupliciSyncThing2.py
Normal file
152
TestDupliciSyncThing2.py
Normal file
@@ -0,0 +1,152 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user