Linux Dateien automatisch sortieren mit Python Script

Python-Script, das Dateien in einem bestimmten Ordner (z.B. Downloads) anhand ihrer Endungen in passende Unterordner (wie Bilder, Dokumente, Videos etc.) verschiebt.

Linux Dateien automatisch sortieren mit Python Script

Dein Download-Ordner quillt über mit Bildern, PDFs, Videos und Installationsdateien? Es wird Zeit, automatisch Ordnung zu schaffen! Statt manuell zu sortieren, können wir ein einfaches, aber mächtiges Python-Script schreiben, das diese Aufgabe für uns erledigt. Python eignet sich hervorragend für solche Automatisierungsaufgaben unter Linux.

In diesem Tutorial lernst du Schritt für Schritt, wie du ein Python-Script erstellst, das Dateien in einem bestimmten Ordner (z.B. Downloads) anhand ihrer Endungen in passende Unterordner (wie Bilder, Dokumente, Videos etc.) verschiebt.

Voraussetzungen

  • Python 3 ist auf deinem Linux-System installiert (prüfe mit python3 --version im Terminal). Meistens ist es standardmäßig dabei.
  • Grundlegendes Verständnis der Kommandozeile.

In 8 Schritte dein Python Skript zur Automatisierung anfertigen

Schritt 1: Planung – Was soll das Script tun?

Unser Ziel: Das Script soll alle Dateien (keine Ordner) im Downloads-Verzeichnis durchgehen. Anhand der Dateiendung (z.B. .jpg, .png, .pdf, .mp4) soll es erkennen, um welchen Dateityp es sich handelt, und die Datei in einen entsprechenden Unterordner (Bilder, Dokumente, Videos etc.) innerhalb des Downloads-Ordners verschieben. Wenn ein Zielordner noch nicht existiert, soll er automatisch erstellt werden.

Schritt 2: Projektordner und Script-Datei anlegen

Öffne dein Terminal und erstelle einen Ordner für unser Projekt und darin die Python-Datei:

mkdir ~/python-organizer
cd ~/python-organizer
touch organize_downloads.py
nano organize_downloads.py # Oder öffne die Datei in deinem Lieblingseditor

Schritt 3: Benötigte Module importieren

Wir brauchen zwei eingebaute Python-Module: os für die Interaktion mit dem Betriebssystem (Dateien auflisten, Pfade erstellen) und shutil zum Verschieben von Dateien. Füge am Anfang deiner organize_downloads.py hinzu:

import os
import shutil
import time # Fügen wir hinzu, um eine kleine Pause einzubauen (optional)

Schritt 4: Quellordner definieren

Wir legen fest, welcher Ordner aufgeräumt werden soll. os.path.expanduser('~') gibt uns den Pfad zum Home-Verzeichnis des aktuellen Benutzers.

# Quellordner (z.B. Downloads)
source_folder = os.path.expanduser('~/Downloads')

Schritt 5: Zielordner definieren

Wir legen fest, welche Dateiendungen in welche Ordner sollen. Ein Dictionary eignet sich hierfür gut. Wir definieren auch einen Ordner für "Sonstiges".

# Zuordnung von Dateiendungen zu Zielordnern (Namen der Unterordner)
dest_folders = {
    # Bilder
    '.jpg': 'Bilder', '.jpeg': 'Bilder', '.png': 'Bilder', '.gif': 'Bilder', '.bmp': 'Bilder', '.svg': 'Bilder', '.webp': 'Bilder',
    # Dokumente
    '.pdf': 'Dokumente', '.doc': 'Dokumente', '.docx': 'Dokumente', '.odt': 'Dokumente', '.txt': 'Dokumente', '.rtf': 'Dokumente',
    # Videos
    '.mp4': 'Videos', '.avi': 'Videos', '.mov': 'Videos', '.mkv': 'Videos', '.wmv': 'Videos',
    # Musik
    '.mp3': 'Musik', '.wav': 'Musik', '.ogg': 'Musik', '.flac': 'Musik',
    # Archive
    '.zip': 'Archive', '.rar': 'Archive', '.tar': 'Archive', '.gz': 'Archive', '.7z': 'Archive',
    # Code/Scripts (Beispiele)
    '.py': 'Scripts', '.js': 'Scripts', '.sh': 'Scripts', '.html': 'Code', '.css': 'Code',
    # ISOs/Images
    '.iso': 'ISOs', '.img': 'ISOs',
    # Präsentationen
    '.ppt': 'Präsentationen', '.pptx': 'Präsentationen', '.odp': 'Präsentationen',
    # Tabellen
    '.xls': 'Tabellen', '.xlsx': 'Tabellen', '.ods': 'Tabellen', '.csv': 'Tabellen',
}

# Name für den Ordner, wenn keine Zuordnung passt
other_folder_name = 'Sonstiges'

(Passe diese Liste nach deinen Bedürfnissen an!)

Schritt 6: Durch Dateien iterieren und verschieben

Jetzt kommt die Hauptlogik: Wir gehen alle Einträge im Quellordner durch.

print(f"Starte Organisation im Ordner: {source_folder}")

# Gehe durch alle Dateien und Ordner im Quellverzeichnis
for filename in os.listdir(source_folder):
    source_path = os.path.join(source_folder, filename)

    # Überspringe Ordner, bearbeite nur Dateien
    if not os.path.isfile(source_path):
        continue

    # Finde die Dateiendung (inklusive Punkt, klein geschrieben)
    _, file_extension = os.path.splitext(filename)
    file_extension = file_extension.lower()

    # Finde den Zielordnernamen oder nutze 'Sonstiges'
    target_folder_name = dest_folders.get(file_extension, other_folder_name)
    target_folder_path = os.path.join(source_folder, target_folder_name)

    # Erstelle den Zielordner, falls er nicht existiert
    os.makedirs(target_folder_path, exist_ok=True)

    # Konstruiere den vollständigen Zielpfad für die Datei
    destination_path = os.path.join(target_folder_path, filename)

    # Verschiebe die Datei
    try:
        print(f"Verschiebe '{filename}' nach '{target_folder_name}/'")
        shutil.move(source_path, destination_path)
        time.sleep(0.1) # Kleine Pause, um die Ausgabe verfolgen zu können (optional)
    except Exception as e:
        print(f"!! Fehler beim Verschieben von '{filename}': {e}")

print("Organisation abgeschlossen.")

Schritt 7: Das komplette Script

#!/usr/bin/env python3
import os
import shutil
import time

# Quellordner (z.B. Downloads)
source_folder = os.path.expanduser('~/Downloads')

# Zuordnung von Dateiendungen zu Zielordnern (Namen der Unterordner)
dest_folders = {
    # Bilder
    '.jpg': 'Bilder', '.jpeg': 'Bilder', '.png': 'Bilder', '.gif': 'Bilder', '.bmp': 'Bilder', '.svg': 'Bilder', '.webp': 'Bilder',
    # Dokumente
    '.pdf': 'Dokumente', '.doc': 'Dokumente', '.docx': 'Dokumente', '.odt': 'Dokumente', '.txt': 'Dokumente', '.rtf': 'Dokumente',
    # Videos
    '.mp4': 'Videos', '.avi': 'Videos', '.mov': 'Videos', '.mkv': 'Videos', '.wmv': 'Videos',
    # Musik
    '.mp3': 'Musik', '.wav': 'Musik', '.ogg': 'Musik', '.flac': 'Musik',
    # Archive
    '.zip': 'Archive', '.rar': 'Archive', '.tar': 'Archive', '.gz': 'Archive', '.7z': 'Archive',
    # Code/Scripts (Beispiele)
    '.py': 'Scripts', '.js': 'Scripts', '.sh': 'Scripts', '.html': 'Code', '.css': 'Code',
    # ISOs/Images
    '.iso': 'ISOs', '.img': 'ISOs',
    # Präsentationen
    '.ppt': 'Präsentationen', '.pptx': 'Präsentationen', '.odp': 'Präsentationen',
    # Tabellen
    '.xls': 'Tabellen', '.xlsx': 'Tabellen', '.ods': 'Tabellen', '.csv': 'Tabellen',
}

# Name für den Ordner, wenn keine Zuordnung passt
other_folder_name = 'Sonstiges'

print(f"Starte Organisation im Ordner: {source_folder}")

# Gehe durch alle Dateien und Ordner im Quellverzeichnis
for filename in os.listdir(source_folder):
    source_path = os.path.join(source_folder, filename)

    # Überspringe Ordner, bearbeite nur Dateien
    if not os.path.isfile(source_path):
        continue

    # Finde die Dateiendung (inklusive Punkt, klein geschrieben)
    _, file_extension = os.path.splitext(filename)
    file_extension = file_extension.lower()

    # Finde den Zielordnernamen oder nutze 'Sonstiges'
    target_folder_name = dest_folders.get(file_extension, other_folder_name)
    target_folder_path = os.path.join(source_folder, target_folder_name)

    # Erstelle den Zielordner, falls er nicht existiert
    # exist_ok=True verhindert Fehler, wenn Ordner schon da ist
    os.makedirs(target_folder_path, exist_ok=True)

    # Konstruiere den vollständigen Zielpfad für die Datei
    destination_path = os.path.join(target_folder_path, filename)

    # Verschiebe die Datei
    try:
        print(f"Verschiebe '{filename}' nach '{target_folder_name}/'")
        shutil.move(source_path, destination_path)
        time.sleep(0.1) # Kleine Pause (optional)
    except Exception as e:
        # Fängt allgemeine Fehler ab, z.B. wenn die Zieldatei schon existiert
        print(f"!! Fehler beim Verschieben von '{filename}': {e}")

print("Organisation abgeschlossen.")

Schritt 8: Script ausführen & Testen

  1. Speichere die Datei organize_downloads.py.
  2. Öffne dein Terminal und navigiere in den Projektordner: cd ~/python-organizer
  3. WICHTIG: Teste das Script zuerst mit ein paar Beispieldateien in deinem Download-Ordner oder einem Testordner, nicht sofort mit deinem vollen, wichtigen Ordner! Mache ggf. ein Backup.
  4. Führe das Script aus: python3 organize_downloads.py
  5. Beobachte die Ausgabe im Terminal und prüfe, ob die Dateien korrekt in die neu erstellten Unterordner verschoben wurden.

Teile deine Meinung mit der Community

Herzlichen Glückwunsch! Du hast ein Python-Script erstellt, das automatisch Ordnung in deinem Download-Ordner schafft. Dieses Script ist eine gute Grundlage. Du kannst es erweitern, z.B. durch:

  • Hinzufügen weiterer Dateitypen.
  • Fehlerbehandlung für bereits existierende Dateien im Zielordner.
  • Organisation nach Datum (z.B. Unterordner pro Monat/Jahr).
  • Protokollierung (Logging) der verschobenen Dateien.
  • Erstellung einer grafischen Oberfläche (aufwändiger).

Python ist unglaublich vielseitig für solche Automatisierungsaufgaben unter Linux. Viel Spaß beim Experimentieren!

Read more