Dosya ve Dizin Kopyalama Betiği

Python programlama dili hakkında bilgiler, kaynaklar, dokümanlar ve örneklerin bulunduğu bölümümüz.
Cevapla
Kullanıcı avatarı
TRWE_2012
Mesaj Panosu Yöneticisi
Mesaj Panosu Yöneticisi
Mesajlar: 904
Kayıt: 30 Ağu 2022 21:59
Konum: DÜZCE/Akçakoca
Meslek: MADEN MÜHENDİSİ
Teşekkür etti: 254 kez
Teşekkür edildi: 754 kez
İletişim:

Dosya ve Dizin Kopyalama Betiği

Mesaj 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ı!
Dosya ekleri
Dizin_Dosya_Kopyalama.zip
TRWE_2012 tarafından kodlandı.
TRWE_2012
(957 Byte) 98 kere indirildi
Verily We have granted thee a manifest Victory
Fetih Suresi - 1.Ayet


Resim
Resim

Etiketler:
Cevapla

“Python Programlama” sayfasına dön