mv — Dateien verschieben und umbenennen
Praxis-Guide zu mv: Dateien und Verzeichnisse verschieben oder umbenennen, das Überschreiben kontrollieren, Backups anlegen und stapelweise umbenennen.
mv verschiebt Dateien und Verzeichnisse an einen neuen Ort oder benennt sie um – innerhalb desselben Dateisystems geht das blitzschnell, weil nur der Verzeichniseintrag geändert und nichts kopiert wird. Genau deshalb solltest du aufpassen: Ohne -i oder -n überschreibt mv eine vorhandene Zieldatei kommentarlos und ohne Rückfrage – der alte Inhalt ist dann unwiederbringlich weg. Dieser Guide zeigt dir das Verschieben und Umbenennen im Alltag, wie du das Überschreiben steuerst, Backups anlegst und ganze Dateigruppen per Muster oder Schleife umbenennst.
Grundlegendes Verschieben & Umbenennen
mv <source> <destination> — Verschiebt eine Datei an einen neuen Ort oder benennt sie um.
mv report.txt /archive/report.txtmv <old_name> <new_name> — Benennt eine Datei im selben Verzeichnis um.
mv draft.md final.mdmv <file1> <file2> <directory> — Verschiebt mehrere Dateien in ein Verzeichnis.
mv index.html style.css app.js /var/www/html/mv *.txt <directory> — Verschiebt alle Dateien, die auf ein Glob-Muster passen, in ein Verzeichnis.
mv *.log /var/log/archive/mv <source_dir> <destination_dir> — Verschiebt ein ganzes Verzeichnis oder benennt es um.
mv ./old-project/ ./new-project/Überschreiben steuern
mv -i <source> <destination> — Interaktiver Modus. Fragt vor dem Überschreiben einer vorhandenen Datei nach.
mv -i new-config.yml /etc/app/config.ymlmv -n <source> <destination> — Kein Überschreiben (no clobber). Überschreibt niemals eine vorhandene Datei.
mv -n defaults.conf /etc/app/config.confmv -f <source> <destination> — Erzwingen. Überschreibt ohne Rückfrage (Standardverhalten).
mv -f updated.bin /usr/local/bin/appmv -u <source> <destination> — Aktualisieren. Verschiebt nur, wenn die Quelle neuer ist als das Ziel oder das Ziel fehlt.
mv -u *.html /var/www/html/mv --update=none <source> <destination> — Expliziter Aktualisierungsmodus: none (wie -n), all (Standard) oder older (wie -u).
mv --update=older ./assets/* /var/www/assets/Backup-Optionen
mv -b <source> <destination> — Legt vor dem Überschreiben ein Backup der Zieldatei an (hängt die Endung ~ an).
mv -b new.conf /etc/app/app.confmv --backup=numbered <source> <destination> — Legt nummerierte Backups (.~1~, .~2~ usw.) der überschriebenen Datei an.
mv --backup=numbered config.yml /etc/app/config.ymlmv --backup=existing <source> <destination> — Nummerierte Backups, falls bereits welche existieren, sonst ein einfaches ~-Backup.
mv --backup=existing data.json /var/data/data.jsonmv -S '<suffix>' <source> <destination> — Verwendet eine eigene Endung für Backup-Dateien statt des Standard-~.
mv -b -S '.bak' config.yml /etc/app/config.ymlAusgabe & Zielverzeichnis
mv -v <source> <destination> — Ausführlicher Modus. Gibt jede Datei aus, während sie verschoben wird.
mv -v *.log /archive/logs/mv -v <old_name> <new_name> — Umbenennen mit Bestätigungsausgabe von altem und neuem Namen.
mv -v draft-v1.md release-notes.mdmv -t <directory> <file1> <file2> — Gibt das Zielverzeichnis zuerst an. Nützlich mit xargs und find.
find . -name '*.bak' -print0 | xargs -0 mv -t /tmp/backups/mv -T <source> <destination> — Behandelt das Ziel als normale Datei, nicht als Verzeichnis. Schlägt fehl, wenn das Ziel ein Verzeichnis ist.
mv -T old-dir/ new-dir/Muster für Stapel-Umbenennung
for f in *.txt; do mv "$f" "${f%.txt}.md"; done — Benennt alle .txt-Dateien in .md um, indem die Endung geändert wird.
for f in *.txt; do mv "$f" "${f%.txt}.md"; donefor f in *; do mv "$f" "$(echo $f | tr 'A-Z' 'a-z')"; done — Benennt alle Dateien im aktuellen Verzeichnis in Kleinbuchstaben um.
for f in *; do mv "$f" "$(echo $f | tr 'A-Z' 'a-z')"; donefor f in *\ *; do mv "$f" "${f// /_}"; done — Ersetzt Leerzeichen in allen Dateinamen durch Unterstriche.
for f in *\ *; do mv "$f" "${f// /_}"; donefor f in *.jpg; do mv "$f" "photo_$(printf '%03d' $i).jpg"; ((i++)); done — Nummeriert alle JPG-Dateien fortlaufend mit führenden Nullen.
i=1; for f in *.jpg; do mv "$f" "photo_$(printf '%03d' $i).jpg"; ((i++)); donerename 's/<pattern>/<replacement>/' <files> — Perl-Werkzeug rename. Benennt Dateien stapelweise per Regex um (nicht auf allen Systemen verfügbar).
rename 's/\.jpeg$/.jpg/' *.jpegrename 's/^/prefix_/' <files> — Stellt allen passenden Dateinamen ein Präfix voran (Perl-rename).
rename 's/^/2024_/' *.logrename 'y/A-Z/a-z/' <files> — Wandelt Dateinamen per Perl-rename von Groß- in Kleinbuchstaben um.
rename 'y/A-Z/a-z/' *.TXTHäufige Muster
mv <file> <file>.bak — Schnelles Backup, indem .bak an den Dateinamen angehängt wird.
mv config.yml config.yml.bakmv <file>.bak <file> — Stellt eine Datei aus einem .bak-Backup wieder her.
mv config.yml.bak config.ymlmv <file> /tmp/ — Verschiebt eine Datei nach /tmp, statt sie zu löschen (sicherer als rm).
mv unwanted-file.log /tmp/mv <dir>/{old_name,new_name} — Benennt eine Datei per Brace-Expansion um (Shell-Kurzschreibweise).
mv /etc/app/{config.yml.old,config.yml}find <dir> -name '<pattern>' -exec mv {} <dest>/ \; — Findet Dateien per Muster und verschiebt sie in ein Zielverzeichnis.
find ./downloads/ -name '*.pdf' -exec mv {} ./documents/ \;find <dir> -name '<pattern>' -print0 | xargs -0 mv -t <dest>/ — Findet und verschiebt Dateien sicher (auch bei Leerzeichen im Namen).
find . -name '*.tmp' -print0 | xargs -0 mv -t /tmp/cleanup/find <dir> -maxdepth 1 -mtime +<days> -exec mv {} <archive>/ \; — Verschiebt Dateien, die älter als N Tage sind, in ein Archivverzeichnis.
find ./logs/ -maxdepth 1 -mtime +30 -exec mv {} ./archive/logs/ \; Fazit
mv gehört zu den am häufigsten genutzten Kommandos überhaupt: ein Werkzeug für Verschieben und Umbenennen, im selben Dateisystem ohne spürbare Wartezeit, weil keine Daten kopiert werden. Der wichtigste Stolperstein ist das stille Überschreiben – gewöhne dir bei wichtigen Zielen -i (Rückfrage) oder -n (kein Überschreiben) an, oder lass mit -b automatisch ein Backup anlegen. Fürs Umbenennen vieler Dateien auf einmal sind Shell-Schleifen und das Perl-Werkzeug rename deine Freunde; über Dateisystemgrenzen hinweg kopiert mv die Daten dagegen tatsächlich und ist dann nicht mehr augenblicklich.
Weiterführende Links
- ubuntuusers-Wiki: grundlegende Kommandos – deutschsprachige Übersicht der wichtigsten Shell-Befehle inklusive mv
- GNU coreutils: mv invocation – offizielle Referenz aller Optionen (englisch)