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