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.txt

mv <old_name> <new_name> — Benennt eine Datei im selben Verzeichnis um.

mv draft.md final.md

mv <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.yml

mv -n <source> <destination> — Kein Überschreiben (no clobber). Überschreibt niemals eine vorhandene Datei.

mv -n defaults.conf /etc/app/config.conf

mv -f <source> <destination> — Erzwingen. Überschreibt ohne Rückfrage (Standardverhalten).

mv -f updated.bin /usr/local/bin/app

mv -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.conf

mv --backup=numbered <source> <destination> — Legt nummerierte Backups (.~1~, .~2~ usw.) der überschriebenen Datei an.

mv --backup=numbered config.yml /etc/app/config.yml

mv --backup=existing <source> <destination> — Nummerierte Backups, falls bereits welche existieren, sonst ein einfaches ~-Backup.

mv --backup=existing data.json /var/data/data.json

mv -S '<suffix>' <source> <destination> — Verwendet eine eigene Endung für Backup-Dateien statt des Standard-~.

mv -b -S '.bak' config.yml /etc/app/config.yml

Ausgabe & 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.md

mv -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"; done

for 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')"; done

for f in *\ *; do mv "$f" "${f// /_}"; done — Ersetzt Leerzeichen in allen Dateinamen durch Unterstriche.

for f in *\ *; do mv "$f" "${f// /_}"; done

for 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++)); done

rename 's/<pattern>/<replacement>/' <files> — Perl-Werkzeug rename. Benennt Dateien stapelweise per Regex um (nicht auf allen Systemen verfügbar).

rename 's/\.jpeg$/.jpg/' *.jpeg

rename 's/^/prefix_/' <files> — Stellt allen passenden Dateinamen ein Präfix voran (Perl-rename).

rename 's/^/2024_/' *.log

rename 'y/A-Z/a-z/' <files> — Wandelt Dateinamen per Perl-rename von Groß- in Kleinbuchstaben um.

rename 'y/A-Z/a-z/' *.TXT

Häufige Muster

mv <file> <file>.bak — Schnelles Backup, indem .bak an den Dateinamen angehängt wird.

mv config.yml config.yml.bak

mv <file>.bak <file> — Stellt eine Datei aus einem .bak-Backup wieder her.

mv config.yml.bak config.yml

mv <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.

Verwandte Kommandos

  • cp – Dateien und Verzeichnisse kopieren
  • rm – Dateien und Verzeichnisse löschen
  • rename – Dateien stapelweise per Muster umbenennen