Skip to main content

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:

  1. Backup erstellen: Erstellen Sie immer ein Backup, bevor Sie große Verschiebeaktionen durchführen
  2. Testlauf: Führen Sie zuerst einen Testlauf mit echo oder ls durch
  3. Absolute Pfade: Verwenden Sie bei kritischen Operationen absolute Pfade statt relativer
  4. Sudo-Vorsicht: Verwenden Sie sudo nur, 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