(Python) Pack Arındırma Betiği

otuzbiroglu

Üye
Üye
Mesaj
11
Beğeni
17
Puan
405
Ticaret Puanı
0
Merhaba,

Marty Sama 5.8 altyapısını kullanarak, Metin2'nin kronolojsinin dışına çıkmadan 24.02.2010 tarihindeki grafik güncellemesinin hemen öncesini hedeflediğim bir altyapı üzerinde çalışıyorum. Pack dosyalarının içeriklerini çok fazla veriden arındırmanın uzun süreler alacağını bildiğim için, belli bir pack dosyasının içeriğini (uzantıdan bağımsız olarak yalnızca klasör yoluna bağlı dosya isimleri) referans alıp hedeflediğim pack dosyasıyla eşleştirecek ve eşleşmeyen tüm dosyaları ya da dosyalar ile birlikte boş klasörleri silecek basit birer python betiği yazdım. İşinize yarayabileceğini düşündüğüm için paylaşmak istedim.

Pack Cleaner.py:
Genişlet Daralt Kopyala
import os

def get_file_paths(folder_path):
    file_paths = set()
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            relative_path = os.path.relpath(os.path.join(root, file), folder_path)
            file_paths.add(relative_path.lower())
    return file_paths

def delete_unmatched_files(source_folder, target_folder):
    source_file_paths = get_file_paths(source_folder)
    for root, dirs, files in os.walk(target_folder):
        for file in files:
            relative_path = os.path.relpath(os.path.join(root, file), target_folder)
            if relative_path.lower() not in source_file_paths:
                file_path = os.path.join(root, file)
                print(f"Deleted: {file_path}")
                os.remove(file_path)

    delete_empty_folders(target_folder)

def delete_empty_folders(folder_path):
    for root, dirs, files in os.walk(folder_path, topdown=False):
        for dir in dirs:
            dir_path = os.path.join(root, dir)
            if not os.listdir(dir_path):
                print(f"Empty folder deleted: {dir_path}")
                os.rmdir(dir_path)

if __name__ == "__main__":
    source_folder = r"C:\Users\User\Desktop\Metin2_TR_20100518\pack\pc"
    target_folder = r"C:\Users\User\Desktop\S3llMetin2-v22.5.7.0\pack\pc"

    delete_unmatched_files(source_folder, target_folder)

Pack Cleaner (Without folders).py:
Genişlet Daralt Kopyala
import os

def get_file_paths(folder_path):
    file_paths = set()
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            relative_path = os.path.relpath(os.path.join(root, file), folder_path)
            file_paths.add(relative_path.lower())
    return file_paths

def delete_unmatched_files(source_folder, target_folder):
    source_file_paths = get_file_paths(source_folder)
    for root, dirs, files in os.walk(target_folder):
        for file in files:
            relative_path = os.path.relpath(os.path.join(root, file), target_folder)
            if relative_path.lower() not in source_file_paths:
                file_path = os.path.join(root, file)
                print(f"Deleted: {file_path}")
                os.remove(file_path)

if __name__ == "__main__":
    source_folder = r"C:\Users\User\Desktop\Metin2_20070608\pack\pc"
    target_folder = r"C:\Users\User\Desktop\S3llMetin2-v22.5.7.0\pack\pc"
    
    delete_unmatched_files(source_folder, target_folder)

"source_folder" değişkeni referans alınacak pack yolunu temsil eder. Örneğin, 18.05.2010 tarihli türkiye clientine ait pack dosyalarını referans alabilirsiniz. "target_folder" değişkeni ise referans aldığınız dosyalara göre temizlenecek pack yolunu temsil eder. Marty Sama'nın 22.5.7.0 sürümlü clientine ait pack dosyalarını temizlemek isteyebilirsiniz. Bu işlemi yapmadan önce lütfen dosyalarınızı yedekleyin. Dosya yolları bire bir uyuşmazsa betik pack içeriğini tamamen silebilir.

locale_uk (2007) referans alınarak locale_tr (2010) pack dosyası için öncesi,

1726606826118.webp


Pack Cleaner (Without folders).py kullanılarak yapılan temizleme sonrası,

1726606877401.webp


Pack Cleaner.py kullanılarak yapılan temizleme sonrası,

1726606955839.webp
 
Böyle kaliteli paylaşımlar görmek beni mutlu ediyor.
 
Bu şekilde değilde özellikle martyde eklenen yeni map, binek, kostüm, item gibi dosyaları packten silebileceğimiz birşey olsa harika olurdu elle yapmak resmen işgence ve hatalı :D
 
Üst