Dosya ve Dizin Kopyalama Betiği
Gönderilme zamanı: 24 Mar 2025 18:14
BETİĞİN KOD İÇERİĞİ :
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)
Windows’ta Çalıştırıldığında (shutil Kullanır)
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()
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ı!
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ı!