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
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.
--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.
mv alt.txt neu.txtalt.txt heißt anschließend neu.txt. Es wird keine Kopie erzeugt, der Inode bleibt derselbe.
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.
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.
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.
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.
mv -i bericht.txt /home/user/backup/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.
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.
| Szenario | Was passiert intern | Geschwindigkeit |
|---|---|---|
| Gleiches Filesystem | Einziger rename(2)-Syscall | Konstant, unabhängig von Dateigröße |
| Unterschiedliche Filesysteme | cp + unlink Datei für Datei | Abhängig von Größe und I/O |
| Wechsel zu Netzwerk-Share | Wie unterschiedliches FS, plus Netzwerk-Latenz | Langsam, 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
- mv – GNU Coreutils (man7.org) — Offizielle Manpage mit allen Optionen
- GNU Coreutils: mv invocation — Ausführliche Dokumentation mit Beispielen
- Arch Wiki: Core utilities — Praxisnahe Tipps zu mv und anderen Grundwerkzeugen
- rename – Perl Manpage — Massen-Umbenennungen mit regulären Ausdrücken
Verwandte Artikel
- cp – Dateien und Verzeichnisse kopieren — Das Kopier-Pendant zu mv
- cd – Verzeichnis wechseln — Navigation im Dateisystem
- Linux Pfade (PATH) — Absolute und relative Pfade
- Linux Berechtigungen — Dateirechte beim Verschieben
- Linux Shell — Globbing, Quoting und Wildcards