Das mv Tool verschiebt Dateien und Verzeichnisse — oder benennt sie um. Beides ist technisch dieselbe Operation: Eine Datei bekommt einen neuen Pfad. Innerhalb eines Filesystems passiert das atomar und blitzschnell, weil nur der Inode-Eintrag im Verzeichnis aktualisiert wird. Über Filesystem-Grenzen hinweg muss mv kopieren und löschen — was länger dauert und unterbrochen werden kann.

Syntax

Bash
mv [OPTION] QUELLE ZIEL
mv [OPTION] QUELLE... VERZEICHNIS
mv [OPTION] -t VERZEICHNIS QUELLE...

Die erste Form benennt um oder verschiebt eine einzelne Datei. Die zweite verschiebt eine oder mehrere Quellen in ein Verzeichnis. Die dritte Form mit -t ist nützlich, wenn das Ziel zuerst kommen muss — etwa beim Einsatz von xargs.

Parameter
--backup[=CONTROL]

Erstellt eine Sicherung der Zieldatei, falls sie überschrieben würde. CONTROL kann none, numbered, existing oder simple sein.

-b

Wie --backup, akzeptiert aber kein Argument.

-f, --force

Überschreibt vorhandene Zieldateien ohne Rückfrage (überstimmt -i).

-i, --interactive

Fragt nach, bevor eine vorhandene Datei überschrieben wird.

-n, --no-clobber

Überschreibt vorhandene Dateien niemals und meldet keinen Fehler.

--strip-trailing-slashes

Entfernt abschließende Schrägstriche aus den Quell-Argumenten.

-S, --suffix=SUFFIX

Ändert die Standard-Dateiendung von Sicherungsdateien.

-t, --target-directory=DIRECTORY

Verschiebt alle Quell-Argumente in das angegebene Zielverzeichnis. Nützlich bei find ... | xargs mv -t ziel/.

-T, --no-target-directory

Behandelt das Ziel als normale Datei, nicht als Verzeichnis.

--update[=UPDATE]

Verschiebt nur, wenn die Quelle neuer ist oder das Ziel fehlt. UPDATE kann all, none oder older sein.

-u

Gleichbedeutend mit --update=older.

-v, --verbose

Zeigt jede einzelne Verschiebung an.

-Z, --context

Setzt den SELinux-Sicherheitskontext der Zieldatei auf den Standardtyp.

--help

Zeigt die Hilfe an und beendet das Programm.

--version

Zeigt Versionsinformationen und beendet das Programm.

Umbenennen oder Verschieben — derselbe Befehl

Auf Unix gibt es kein eigenes rename-Kommando in den Coreutils. Stattdessen erledigt mv beides: Wenn Quelle und Ziel im selben Verzeichnis liegen, ist es eine Umbenennung. Wenn das Ziel ein anderes Verzeichnis ist, ist es eine Verschiebung. Aus Sicht des Filesystems ist beides ein einzelner rename(2)-Syscall.

Bash Umbenennen
mv alt.txt neu.txt

alt.txt heißt anschließend neu.txt. Es wird keine Kopie erzeugt, der Inode bleibt derselbe.

Bash Verschieben
mv datei.txt /tmp/

datei.txt landet in /tmp/ — sofern /tmp auf demselben Filesystem liegt, ohne dass der Inhalt physisch kopiert wird.

Mehrere Dateien in ein Verzeichnis verschieben

Sobald mehr als zwei Argumente angegeben sind, muss das letzte ein Verzeichnis sein. mv verschiebt dann alle Quellen dorthin.

Bash Mehrere Quellen
mv bericht.txt notizen.md bilder/ archiv/

Die drei Quellen — zwei Dateien und ein Verzeichnis — werden in archiv/ verschoben. Existiert archiv/ nicht, schlägt der Befehl fehl.

Globbing mit mv

Die Shell expandiert Wildcards, bevor mv sie sieht. So lassen sich ganze Gruppen verschieben.

Bash Globbing
mv *.log logs/

Alle .log-Dateien im aktuellen Verzeichnis wandern nach logs/. Existiert das Zielverzeichnis nicht, gibt mv einen Fehler aus.

Mit find kombinieren

Wenn Quellen tief verschachtelt liegen, übernimmt find die Auswahl und reicht die Treffer an mv weiter.

Bash find + mv
find . -name '*.tmp' -exec mv {} /tmp/cache/ \;

Jede gefundene .tmp-Datei wird einzeln nach /tmp/cache/ verschoben. Mit xargs und -t geht das in Bündeln deutlich schneller.

Interaktiv und sicher arbeiten

mv überschreibt vorhandene Zieldateien standardmäßig kommentarlos. Zwei Optionen entschärfen das.

Bash Mit Rückfrage
mv -i bericht.txt /home/user/backup/
Output
mv: overwrite '/home/user/backup/bericht.txt'? (yes/no)

Mit -n (no-clobber) überspringt mv vorhandene Dateien stillschweigend, statt sie zu überschreiben.

Nur neuere Quellen verschieben

mv -u aktualisiert das Ziel nur, wenn die Quelle neuer ist oder das Ziel fehlt. Praktisch für inkrementelle Verschiebungen, etwa wenn du eine Download-Liste in ein Archiv einsortierst und vorhandene Versionen nicht überschreiben willst.

Bash Update-Modus
mv -u downloads/*.iso archiv/

Cross-Filesystem-Bewegungen

Solange Quelle und Ziel auf demselben Filesystem liegen, führt mv einen einzigen Syscall aus — sekundenbruchteil-schnell und atomar. Sobald Filesystem-Grenzen überschritten werden (etwa von /home auf eine separate /mnt/extern-Partition), muss mv die Daten tatsächlich kopieren und anschließend die Originale löschen.

SzenarioWas passiert internGeschwindigkeit
Gleiches FilesystemEinziger rename(2)-SyscallKonstant, unabhängig von Dateigröße
Unterschiedliche Filesystemecp + unlink Datei für DateiAbhängig von Größe und I/O
Wechsel zu Netzwerk-ShareWie unterschiedliches FS, plus Netzwerk-LatenzLangsam, kann durch Verbindungsabbruch fehlschlagen

Bei Cross-FS-Verschiebungen ist die Operation nicht atomar: Wird mv unterbrochen (Stromausfall, Strg+C, abgebrochene Netzwerk-Verbindung), kann die Datei teilweise im Ziel und teilweise in der Quelle liegen. Für kritische Verschiebungen großer Mengen ist rsync --remove-source-files deshalb robuster — es überträgt mit Wiederaufnahme-Fähigkeit und löscht die Quelle erst nach erfolgreicher Übertragung.

Häufige Stolperfallen

mv überschreibt ohne Warnung.

Standardmäßig schreibt mv ziel.txt vorhanden.txt über die existierende vorhanden.txt hinweg, ohne Rückfrage. Mit -i (interactive) erzwingst du eine Bestätigung, mit -n (no-clobber) verhinderst du das Überschreiben komplett. Viele Distributionen setzen alias mv=‘mv -i’ in /etc/profile oder der Shell-Konfiguration als Schutz — in Skripten und mit sudo greift dieser Alias jedoch nicht.

Massen-Rename mit Wildcards funktioniert nicht.

Ein Befehl wie mv *.JPG *.jpg macht nicht das Erwartete. Die Shell expandiert beide Wildcards, bevor mv sie sieht — am Ende stehen alle .JPG-Dateien plus alle bereits existierenden .jpg-Dateien als Quellen, und das letzte Argument wird als Ziel behandelt. Ergebnis: ein Fehler oder Datenverlust. Für Massen-Umbenennungen brauchst du das Tool rename (Perl-Variante) oder eine Bash-Schleife: for f in *.JPG; do mv — “$f” ”${f%.JPG}.jpg”; done.

Cross-Filesystem-Verschiebungen sind nicht atomar.

Innerhalb eines Filesystems ist mv atomar — die Datei ist entweder am alten oder am neuen Ort, nie an beiden oder keinem. Sobald aber Filesystem-Grenzen überschritten werden (etwa von /home auf /mnt/usb), kopiert mv tatsächlich und löscht erst danach. Wird der Vorgang unterbrochen, kann die Datei halb übertragen sein. Für große Datenmengen über FS-Grenzen ist rsync —remove-source-files robuster.

Symlinks werden verschoben, nicht verfolgt.

Wenn du einen symbolischen Link mit mv bewegst, wird der Link selbst verschoben — nicht die Datei, auf die er zeigt. Bei Hardlinks ist das anders: Der Inode bleibt derselbe, andere Hardlinks auf dieselbe Datei sind nach mv weiterhin gültig. Vorsicht bei mv link/ ziel/ mit nachgestelltem Slash auf einem Symlink: Manche Shells und Kernel-Versionen verhalten sich unterschiedlich, ob der Link selbst oder das Verzeichnis dahinter gemeint ist.

mv ordner/* ziel/ lässt den Quellordner zurück.

Diese Variante verschiebt nur den Inhalt des Ordners — der Quellordner selbst bleibt leer zurück. Versteckte Dateien (Punkt-Dateien wie .gitignore) bleiben außerdem unsichtbar für das Globbing zurück, sofern shopt -s dotglob nicht aktiv ist. Wer den Ordner samt Inhalt verschieben will, schreibt mv ordner/ ziel/ ohne Stern. Wer den Quellordner danach löschen will, ergänzt ein rmdir ordner/.

Sonderzeichen in Dateinamen brauchen Quotes.

Dateinamen mit Leerzeichen, Klammern oder Sonderzeichen müssen in einfache oder doppelte Anführungszeichen oder mit Backslash geschützt werden. mv mein dokument.txt /tmp/ versucht zwei separate Quellen mein und dokument.txt zu verschieben. Korrekt ist mv ‘mein dokument.txt’ /tmp/. Bei Dateinamen mit führendem Bindestrich (-datei.txt) brauchst du das -Trennzeichen: mv — -datei.txt /tmp/, sonst interpretiert mv den Dateinamen als Option.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht