1. sayfa (Toplam 1 sayfa)

Dosya ve Dizin Kopyalama Betiği

Gönderilme zamanı: 24 Mar 2025 18:14
gönderen TRWE_2012
BETİĞİN KOD İÇERİĞİ :

Kod: Tümünü seç

import os
import shutil
import sys
import time
import subprocess

def progress_bar(progress, total, bar_length=40):
    percent = int((progress / total) * 100)
    bar = "#" * (bar_length * percent // 100) + "-" * (bar_length - (bar_length * percent // 100))
    sys.stdout.write(f"\r[{bar}] {percent}%")
    sys.stdout.flush()

def copy_with_shutil(src, dest):
    """Windows için shutil ile kopyalama"""
    if os.path.isdir(src):  
        items = os.listdir(src)
        total = len(items)
        os.makedirs(dest, exist_ok=True)

        for i, item in enumerate(items, start=1):
            src_path = os.path.join(src, item)
            dest_path = os.path.join(dest, item)

            if os.path.isdir(src_path):  
                shutil.copytree(src_path, dest_path)
            else:  
                shutil.copy2(src_path, dest_path)

            progress_bar(i, total)
            time.sleep(0.05)

    else:  
        shutil.copy2(src, dest)
        progress_bar(1, 1)

def copy_with_rsync(src, dest):
    """Linux için rsync ile hızlı kopyalama"""
    cmd = ["rsync", "-av", "--progress", src + "/", dest]
    subprocess.run(cmd)

def main():
    """Ana işlem akışı"""
    src = input("Kaynak dosya/dizin yolunu girin: ").strip()
    if not os.path.exists(src):
        print("Hata: Kaynak bulunamadı!")
        return

    dest = input("Hedef dizin yolunu girin: ").strip()
    if not os.path.isdir(dest):
        print("Hata: Hedef bir dizin olmalı!")
        return

    choice = input("Sadece içindekileri mi kopyalamak istersiniz? (E/H): ").strip().lower()
    if choice == "h":
        dest = os.path.join(dest, os.path.basename(src))

    print("\n[Kopyalama başlıyor...]\n")

    if os.name == "nt":  # Windows
        copy_with_shutil(src, dest)
    else:  # Linux
        copy_with_rsync(src, dest)

    print("\nKopyalama tamamlandı!")

if __name__ == "__main__":
    main()
BETİK AÇIKLAMASI :

Bu Python betiği, kullanıcıdan bir kaynak dosya veya dizin ile bir hedef dizin alarak, bu kaynak dosya veya dizini hedefe kopyalamak için tasarlanmıştır. Betik, Windows ve Linux işletim sistemlerine göre farklı yöntemler kullanmaktadır.

Betik Özellikleri:

Kopyalama Yöntemleri:

Windows için: shutil modülü kullanılarak dosya ve dizinler kopyalanır. Kopyalama işlemi sırasında bir ilerleme çubuğu gösterilir.
Linux için: rsync komutu kullanılarak hızlı ve verimli bir kopyalama işlemi gerçekleştirilir.

İlerleme Çubuğu:

Kopyalama işlemi sırasında, kullanıcıya ilerleme durumu gösteren bir çubuk sunulur. Bu çubuk, kopyalanan dosya sayısına göre güncellenir.

Kullanıcı Girdisi:

Kullanıcıdan kaynak dosya/dizin yolu ve hedef dizin yolu istenir. Hedef dizin yoksa hata mesajı verilir.
Kullanıcı, kaynak dizinin içeriğini mi yoksa tüm dizini mi kopyalamak istediğini seçebilir.

Hata Kontrolleri:

Betik, kaynak dosya veya dizinin varlığını kontrol eder ve hedefin bir dizin olup olmadığını doğrular.

Ana İşlev:

main() fonksiyonu, betiğin ana akışını yönetir ve kullanıcıdan alınan girdilere göre uygun kopyalama yöntemini çağırır.

ÖRNEK KOMUT ÇIKTISI :

Linux’ta Çalıştırıldığında (rsync Kullanır)

Kod: Tümünü seç

Kaynak dosya/dizin yolunu girin: /mnt/nvme0n1p1/Games/MyBigGame
Hedef dizin yolunu girin: /mnt/nvme1n1p1/Backup
Sadece içindekileri mi kopyalamak istersiniz? (E/H): H

[Kopyalama başlıyor...]

sending incremental file list
MyBigGame/
MyBigGame/file1.bin
   1048576  20%   10.00MB/s    0:00:04
MyBigGame/file2.bin
   2097152  40%   15.00MB/s    0:00:02
MyBigGame/file3.bin
   3145728  60%   18.00MB/s    0:00:01
MyBigGame/file4.bin
   4194304  80%   20.00MB/s    0:00:00
MyBigGame/file5.bin
   5242880 100%   22.00MB/s    0:00:00

Kopyalama tamamlandı!
Windows’ta Çalıştırıldığında (shutil Kullanır)

Kod: Tümünü seç

Kaynak dosya/dizin yolunu girin: D:\Games\MyBigGame
Hedef dizin yolunu girin: E:\Backup
Sadece içindekileri mi kopyalamak istersiniz? (E/H): H

[Kopyalama başlıyor...]

[#####------------------------------------------] 12%
[############----------------------------------] 30%
[#####################------------------------] 55%
[################################------------] 75%
[##############################################] 100%

Kopyalama tamamlandı!