Linux: Inhalte von Ordnern nach Namensmustern verschieben
Linux: Inhalte von Ordnern nach Namensmustern verschieben
Übersicht
Diese Anleitung zeigt, wie Sie mit Linux-Befehlen alle Inhalte von Ordnern, die ein bestimmtes Namensmuster enthalten, in einen Zielordner verschieben.
Voraussetzungen
- Linux-System mit Bash-Shell
- Schreib- und Leserechte für die betroffenen Verzeichnisse
- Grundlegende Kenntnisse der Linux-Kommandozeile
Basis-Befehl
find . -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/* /pfad/zum/zielordner/' _ {} \;
Befehlskomponenten erklärt
| Komponente | Bedeutung |
|---|---|
find . |
Durchsucht das aktuelle Verzeichnis und alle Unterverzeichnisse |
-type d |
Sucht nur nach Verzeichnissen (directories) |
-name "*MUSTER*" |
Filtert Ordner, die "MUSTER" im Namen enthalten |
-exec ... \; |
Führt einen Befehl für jeden gefundenen Ordner aus |
sh -c '...' |
Startet eine neue Shell für die Befehlsausführung |
mv "$1"/* |
Verschiebt alle Dateien aus dem gefundenen Ordner |
_ {} |
Übergibt den gefundenen Ordnerpfad als Parameter |
Schritt-für-Schritt-Anleitung
Schritt 1: Zielordner erstellen
Erstellen Sie zunächst den Zielordner, falls er noch nicht existiert:
mkdir -p /pfad/zum/zielordner
Beispiel:
mkdir -p ~/gesammelte_daten
Schritt 2: Testlauf durchführen
Bevor Sie Dateien tatsächlich verschieben, prüfen Sie, welche Ordner betroffen sind:
find . -type d -name "*MUSTER*"
Beispiel:
find . -type d -name "*backup*"
Ausgabe könnte sein:
./projekte/backup_2024
./dokumente/alte_backups
./temp/backup_neu
Schritt 3: Inhalte anzeigen (optional)
Um zu sehen, welche Dateien verschoben würden:
find . -type d -name "*MUSTER*" -exec sh -c 'echo "Inhalt von $1:"; ls "$1"' _ {} \;
Schritt 4: Dateien verschieben
Führen Sie den eigentlichen Verschiebevorgang aus:
find . -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/* /pfad/zum/zielordner/' _ {} \;
Praxisbeispiele
Beispiel 1: Backup-Ordner konsolidieren
Alle Inhalte von Ordnern mit "backup" im Namen nach ~/alle_backups verschieben:
mkdir -p ~/alle_backups
find . -type d -name "*backup*" -exec sh -c 'mv "$1"/* ~/alle_backups/' _ {} \;
Beispiel 2: Temporäre Dateien sammeln
Alle Inhalte von Ordnern mit "temp" oder "tmp" im Namen verschieben:
mkdir -p /tmp/temp_sammlung
find . -type d -name "*temp*" -exec sh -c 'mv "$1"/* /tmp/temp_sammlung/' _ {} \;
find . -type d -name "*tmp*" -exec sh -c 'mv "$1"/* /tmp/temp_sammlung/' _ {} \;
Beispiel 3: Projektdateien nach Jahr
Alle Inhalte von Ordnern mit "2023" im Namen verschieben:
mkdir -p ~/archiv/2023
find . -type d -name "*2023*" -exec sh -c 'mv "$1"/* ~/archiv/2023/' _ {} \;
Erweiterte Optionen
Case-insensitive Suche
Für Groß-/Kleinschreibung-unabhängige Suche verwenden Sie -iname:
find . -type d -iname "*backup*" -exec sh -c 'mv "$1"/* /zielordner/' _ {} \;
Nur in bestimmten Ebenen suchen
Um nur in einer bestimmten Verzeichnistiefe zu suchen:
find . -maxdepth 2 -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/* /zielordner/' _ {} \;
-maxdepth 1= nur aktuelles Verzeichnis-maxdepth 2= aktuelles Verzeichnis + eine Ebene tiefer-maxdepth 3= bis zu zwei Ebenen tiefer
Bestimmte Dateitypen verschieben
Nur PDF-Dateien aus den gefundenen Ordnern verschieben:
find . -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/*.pdf /zielordner/' _ {} \;
Mit Protokollierung
Aktionen in eine Logdatei schreiben:
find . -type d -name "*MUSTER*" -exec sh -c 'echo "Verschiebe Inhalte von: $1" >> move.log; mv "$1"/* /zielordner/' _ {} \;
Fehlerbehebung
Problem: "mv: cannot stat"
Ursache: Der Quellordner ist leer oder enthält nur versteckte Dateien.
Lösung: Fügen Sie eine Prüfung hinzu:
find . -type d -name "*MUSTER*" -exec sh -c '[ "$(ls -A "$1")" ] && mv "$1"/* /zielordner/' _ {} \;
Problem: Dateinamen-Konflikte
Ursache: Dateien mit gleichem Namen existieren bereits im Zielordner.
Lösung 1 - Überschreiben verhindern:
find . -type d -name "*MUSTER*" -exec sh -c 'mv -n "$1"/* /zielordner/' _ {} \;
Lösung 2 - Interaktiv nachfragen:
find . -type d -name "*MUSTER*" -exec sh -c 'mv -i "$1"/* /zielordner/' _ {} \;
Lösung 3 - Backup erstellen:
find . -type d -name "*MUSTER*" -exec sh -c 'mv -b "$1"/* /zielordner/' _ {} \;
Problem: Berechtigungsfehler
Ursache: Fehlende Schreibrechte im Ziel- oder Quellordner.
Lösung: Mit sudo ausführen (Vorsicht!):
sudo find . -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/* /zielordner/' _ {} \;
Sicherheitshinweise
⚠️ Wichtige Warnungen:
- Backup erstellen: Erstellen Sie immer ein Backup, bevor Sie große Verschiebeaktionen durchführen
- Testlauf: Führen Sie zuerst einen Testlauf mit
echooderlsdurch - Absolute Pfade: Verwenden Sie bei kritischen Operationen absolute Pfade statt relativer
- Sudo-Vorsicht: Verwenden Sie
sudonur, wenn unbedingt notwendig
Empfohlener Workflow
# 1. Trockenlauf - zeigt betroffene Ordner
find . -type d -name "*MUSTER*"
# 2. Inhalte prüfen
find . -type d -name "*MUSTER*" -exec sh -c 'echo "=== $1 ==="; ls "$1"' _ {} \;
# 3. Zielordner erstellen
mkdir -p /pfad/zum/zielordner
# 4. Backup erstellen (optional aber empfohlen)
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz /pfad/zu/quelldaten
# 5. Dateien verschieben
find . -type d -name "*MUSTER*" -exec sh -c 'mv "$1"/* /pfad/zum/zielordner/' _ {} \;
# 6. Ergebnis prüfen
ls -lh /pfad/zum/zielordner
Alternative Methoden
Mit rsync (empfohlen für große Datenmengen)
find . -type d -name "*MUSTER*" -exec sh -c 'rsync -av --remove-source-files "$1"/* /zielordner/' _ {} \;
Vorteile:
- Zeigt Fortschritt an
- Robuster bei Netzwerkproblemen
- Erhält Dateiattribute
Mit Loop und Array
#!/bin/bash
declare -a dirs=($(find . -type d -name "*MUSTER*"))
for dir in "${dirs[@]}"; do
echo "Verschiebe Inhalte von: $dir"
mv "$dir"/* /zielordner/
done
Zusammenfassung
Der find-Befehl in Kombination mit mv ist ein mächtiges Werkzeug zum Konsolidieren von Dateien aus mehreren Ordnern. Beachten Sie immer:
- Führen Sie Testläufe durch
- Erstellen Sie Backups bei wichtigen Daten
- Prüfen Sie Berechtigungen
- Verwenden Sie absolute Pfade bei kritischen Operationen
- Dokumentieren Sie Ihre Aktionen mit Logdateien
Letzte Aktualisierung: Januar 2025
Getestet auf: Ubuntu 22.04, Debian 12, CentOS 8