tek bir tuş ile tüm dosyalarınızı aynı klasöre taşıyacak python ile bir script yazabilir misiniz !

import os
import shutil

def dosyalari_topla(hedef_klasor):

Hedef klasör yoksa oluştur

if not os.path.exists(hedef_klasor):
os.makedirs(hedef_klasor)

# Mevcut çalışma dizinini al
kaynak_klasor = os.getcwd()

for kok, alt_klasorler, dosyalar in os.walk(kaynak_klasor):
    for dosya in dosyalar:
        kaynak_dosya_yolu = os.path.join(kok, dosya)
        
        # Script dosyasının kendisini taşımamak için kontrol ekleyelim
        if os.path.abspath(kaynak_dosya_yolu) == os.path.abspath(os.path.join(kaynak_klasor, 'dosyalari_topla.py')):
            continue

        hedef_dosya_yolu = os.path.join(hedef_klasor, dosya)
        
        # Aynı isimde dosya varsa üzerine yazmamak için numaralandır
        sayac = 1
        while os.path.exists(hedef_dosya_yolu):
            isim, uzanti = os.path.splitext(dosya)
            yeni_isim = f"{isim}_{sayac}{uzanti}"
            hedef_dosya_yolu = os.path.join(hedef_klasor, yeni_isim)
            sayac += 1

        # Dosyayı taşı
        shutil.move(kaynak_dosya_yolu, hedef_dosya_yolu)
        print(f"Taşındı: {dosya}")

if name == “main”:
hedef_klasor_adi = “Toplanan_Dosyalar”
dosyalari_topla(hedef_klasor_adi)

# Kullanıcıdan tek tuşa basmasını bekleme
input(f"\nTüm dosyalar '{hedef_klasor_adi}' klasörüne taşındı. Çıkmak için Enter'a basın...")

Şu an telefonda olduğum için doğru okuyamamış olabilirim.

For döngüsünde gördüğüm kadarıyla ve yanlış anlamamışsam betik kendi bulunduğu yerdeki dosyaları hedefe göndermeye ayarlanmış ama kendisini hariç tutmamış. Daha fonksiyonel yapabilmek için gtk veya qt ile bir gui oluşturup, kaynak nerede olursa olsun onları seçtirip hedefe gönderebilirsiniz. Hatta sürükle bırak desteği ile klasörü komple seçtirip, sadece içindekileri hedefletebilirsiniz.

Flood mesaj için özür dilerim, ayrı ek yapmalıyım.
Başlıktaki sorunun yanıtı hayır, ben yapamam.
Ama yapay zekaya yaptırdım. Aşağıdaki uygulama başarılı çalışıyor:

Önce qt6 kurun. Ardından çalıştırın.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Bu uygulama yapay zeka ile yapılmıştır.
# Eğitim amaçlıdır.
# GNU GPLv3 lisansı kapsamındadır. 

import os
import shutil
import sys
from PyQt6 import QtCore
from PyQt6.QtWidgets import (
    QApplication,
    QWidget,
    QVBoxLayout,
    QHBoxLayout,
    QPushButton,
    QLineEdit,
    QLabel,
    QFileDialog,
    QMessageBox
)

# Gnome ve Wayland ortamlarında kararlı Qt6 çalışması için gelişmiş yapılandırma
if os.environ.get("XDG_SESSION_TYPE") == "wayland":
    os.environ["QT_QPA_PLATFORM"] = "wayland"
    os.environ["QT_WAYLAND_DISABLE_WINDOWDECORATION"] = "0"
    os.environ["QT_ENABLE_HIGHDPI_SCALING"] = "1"
    os.environ["GDK_BACKEND"] = "wayland"
else:
    os.environ["QT_QPA_PLATFORM"] = "xcb"

class DosyaTasiyici(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        
    def init_ui(self):
        # Sürükle-bırak desteğini aktifleştiriyoruz
        self.setAcceptDrops(True)
        self.setWindowTitle("Dosya Taşıyıcı")
        self.resize(500, 200)
        self.kaynak_dosyalar = [] # kaynak klasörün içindekileri hafızaya aldırıyoruz.
        
        # Ana dikey yerleşim
        ana_duzen = QVBoxLayout()
        
        # Sürükle-bırak alanı için mavi kesikli çizgili etiket
        self.etiket = QLabel("\n\nKaynak klasörü bu alana sürükleyip bırakın\n\n")
        self.etiket.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.etiket.setStyleSheet("border: 2px dashed #3498db; border-radius: 5px; background-color: transparent;")
        ana_duzen.addWidget(self.etiket)
        
        # Yatay yerleşim (Yol alanı ve Gözat butonu için)
        yatay_duzen = QHBoxLayout()
        
        self.yol_alani = QLineEdit()
        self.yol_alani.setPlaceholderText("Hedef klasör yolu...")
        yatay_duzen.addWidget(self.yol_alani)
        
        self.btn_gozat = QPushButton("Gözat...")
        self.btn_gozat.clicked.connect(self.klasor_sec)
        yatay_duzen.addWidget(self.btn_gozat)
        
        ana_duzen.addLayout(yatay_duzen)
        
        # Taşıma işlemini başlatan buton
        self.btn_tasi = QPushButton("Mevcut Klasör İçeriğini Taşı")
        self.btn_tasi.clicked.connect(self.dosyalari_tasi)
        ana_duzen.addWidget(self.btn_tasi)
        
        self.setLayout(ana_duzen)

    # Sürüklenen nesne pencere sınırlarına girdiğinde
    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.acceptProposedAction()

    # Bırakma işlemi gerçekleştiğinde
    def dropEvent(self, event):
        urls = event.mimeData().urls()
        if urls:
            yerel_yol = urls[0].toLocalFile()
            # Bırakılan nesne bir klasör ise içindekileri (gizliler dahil) listeye alıyoruz
            if os.path.isdir(yerel_yol):
                self.kaynak_dosyalar = []
                try:
                    for nesne in os.listdir(yerel_yol):
                        tam_yol = os.path.join(yerel_yol, nesne)
                        self.kaynak_dosyalar.append(tam_yol)
                    
                    self.etiket.setText(f"\n\nKaynak yüklendi!\nTaşınacak nesne sayısı: {len(self.kaynak_dosyalar)}\n\n")
                    event.acceptProposedAction()
                except Exception as e:
                    QMessageBox.critical(self, "Hata", f"Klasör içeriği okunamadı: {str(e)}")
            else:
                QMessageBox.warning(self, "Hata", "Lütfen bir dosya değil, içeriği alınacak kaynak klasörü sürükleyin!")

    # Gözat butonu tetiklendiğinde
    def klasor_sec(self):
        secilen_dizin = QFileDialog.getExistingDirectory(self, "Hedef Klasörü Seç", os.path.expanduser("~"))
        if secilen_dizin:
            self.yol_alani.setText(secilen_dizin)


    # Taşıma mantığı
    def dosyalari_tasi(self):
        hedef_dizin = self.yol_alani.text().strip()
        
        if not hedef_dizin or not os.path.isdir(hedef_dizin):
            QMessageBox.warning(self, "Hata", "Lütfen geçerli bir hedef klasör seçin!")
            return
            
        if not self.kaynak_dosyalar:
            QMessageBox.warning(self, "Hata", "Lütfen önce kaynak klasörü sürükle-bırak alanına bırakın!")
            return

        tasinan_sayisi = 0
        hata_sayisi = 0

        for kaynak in self.kaynak_dosyalar:
            # Dosya veya klasörün sadece adını alıyoruz
            nesne_adi = os.path.basename(kaynak)
            hedef = os.path.join(hedef_dizin, nesne_adi)
            
            # Hedef klasörün kendi içindeki bir şeyi kendine taşımasını engelleme kontrolü
            if kaynak == hedef_dizin or os.path.commonpath([kaynak]) == os.path.commonpath([kaynak, hedef_dizin]):
                hata_sayisi += 1
                continue
                
            try:
                shutil.move(kaynak, hedef)
                tasinan_sayisi += 1
            except Exception:
                hata_sayisi += 1

        if tasinan_sayisi > 0 or hata_sayisi > 0:
            QMessageBox.information(
                self, 
                "İşlem Tamamlandı", 
                f"Başarıyla taşınan nesne: {tasinan_sayisi}\nHata oluşan nesne: {hata_sayisi}"
            )
            # İşlem bittiğinde listeyi temizle ve etiketi eski haline getir
            self.kaynak_dosyalar = []
            self.etiket.setText("\n\nHedef klasörü bu alana sürükleyip bırakın\n\n")
        else:
            QMessageBox.information(self, "Bilgi", "Taşınacak nesne bulunamadı veya işlem gerçekleştirilemedi.")

if __name__ == "__main__":
    uygulama = QApplication(sys.argv)
    # Tercih edilen Fusion stili uygulanıyor
    uygulama.setStyle("Fusion")
    
    pencere = DosyaTasiyici()
    pencere.show()
    sys.exit(uygulama.exec())

Etiketlerde bazı hatalar oluşmuş. Kaynak klasörü seçin yerine hedef klasörü seçin yazıyor sürükle bırak widgetinin içinde. Onları elle düzeltebilirsiniz. (Edit: kod etiketi içinden düzelttim tamam.)

1 Beğeni