Der Konsolen Befehl mv - move - Verschieben und Umbenennen von Dateien

Allgemeines

Bearbeiten

Der Befehl mv (move) verschiebt Dateien an eine andere Stelle. Er dient auch zum Umbenennen von Dateien.

Im Gegensatz zum Copy Befehl cp findet hier idR im Dateisystem nur eine Änderung des Verzeichniseintrags statt solange man nicht auf eine andere Datenträgerpartition verschiebt, so dass dieser Befehl oft sehr schnell ausgeführt ist. Die Datei ist unter dem alten Namen bzw. am alten Platz nach einem mv nicht mehr zu finden.

Eine Datei

Bearbeiten

Am schnellsten versteht man den Gebrauch von mv, wenn man nur eine Datei verschiebt oder umbenennt. Wenn nur eine einzige Datei angegeben wird, kann diese beim Verschieben auch einen neuen Namen erhalten.

mv 1.txt 2.txt

Die Datei 1.txt wird in 2.txt umbenannt.

Mehrere Dateien

Bearbeiten

Bei mehreren Dateien muss man aufpassen, dass man alles korrekt angibt und keine Dateien überschreibt. Als Joker dient wie üblich das Sternchen *.

VORSICHT: Das funktioniert nicht: mv *.txt *.bak

  • Um so etwas zu machen braucht man einen Einzeiler
for i in *.txt; do mv $i $i.bak; done

was zumindest aus allen .txt eine .txt.bak macht.


Bitte erst überprüfen

Bearbeiten

Erzeugen Sie drei Dateien

touch 1.t 
touch 2.t
touch 3.t

Dann lassen Sie folgenden Einzeiler ablaufen

 for i in *.t; do mv $i ${i%.*}.b; done

Überprüfen Sie das Ergebnis mit:

ls -la *.b 

Ausgabe:

1.b
2.b
3.b

Alte Dateien nachschauen:

ls -la *.t

Ausgabe: Keine mehr gefunden:

/bin/ls: *.t: Datei oder Verzeichnis nicht gefunden

Beispiele

Bearbeiten

Eine Datei umbenennen

Bearbeiten
mv test.txt test1.txt 

Erstellen Sie eine Datei namens test.txt. Das geht beispielsweise mit dem Befehl touch test.txt oder cat > test.txt. Dann können Sie das Beispiel ausprobieren. Überprüfen Sie den Erfolg ihrer Arbeit mit dem Befehl

ls -la tes*

Die Datei test.txt ist nicht mehr zu finden. Dafür findet sich jetzt dieselbe Datei unter dem Namen test1.txt.

Eine Datei in ein neues Verzeichnis verschieben und den Namen beibehalten

Bearbeiten
mv test.txt /test.txt

Da Sie wahrscheinlich für das oberste Verzeichnis Ihres Rechners keine Zugriffsberechtigung haben, erhalten Sie folgende Fehlermeldung:

mv: reguläre Datei ,,/test.txt" kann nicht angelegt werden: Keine Berechtigung

Für die erforderlichen Root-Rechte wird deswegen noch das Kommando sudo vorangestellt:

sudo mv test.txt /test.txt

Oder Sie legen erst ein anderes Verzeichnis an, in welches Sie ihre Datei kopieren:

mkdir t
mv test.txt ~/t/test.txt

Die Schlangenlinie ~ steht dabei für den Namen ihres Homeverzeichnisses. Dann steht die Datei im Unterverzeichnis t ihres ursprünglichen Verzeichnisses Überprüfen Sie dies mit

cd t
ls -la tes*

Mehrere Dateien in ein neues Verzeichnis verschieben

Bearbeiten

Informationen und Fehlermeldungen des Befehls mv

Bearbeiten

Normalerweise gibt der Befehl mv keine Meldung oder Fehlermeldung aus. Sie sollten deswegen den Befehl mv immer mit dem Parameter -v (verbose - wortreich) nutzen. So erhalten Sie von jedem Verschiebevorgang eine Meldung und können verfolgen, was Ihr Computer getan hat.

mv -v 1.txt 2.txt

Meldung:

Datei umbenannt '1.txt' -> '2.txt'


Existiert die Datei gar nicht, die Sie umbenennen wollen, bekommen Sie folgende Fehlermeldung:

mv: Aufruf von stat für name nicht möglich: Datei oder Verzeichnis nicht gefunden

Wenn das Zielverzeichnis wegen fehlender Zugriffsberechtigung nicht angelegt werden kann gibt es folgende Meldung:

mv: reguläre Datei kann nicht angelegt werden: Keine Berechtigung

Liegt im Ziel-Directory bereits eine Datei mit gleichem Namen, wird beim Aufruf eine Warnung ausgegeben:

mv -i datei verzeichnis

Meldung

mv: »verzeichnis/datei« überschreiben?

Optionen

Bearbeiten
  • --backup[=KONTROLLE] vor Entfernen Sicherung anlegen
  • -b wie --backup, akzeptiert aber keine Argumente
    • Erzeugt Backup-Dateien, falls im Zielverzeichnis bereits gleichnamige Dateien existieren.

interactive nachfragen

Bearbeiten
  • -i, --interactive vor Überschreiben nachfragen (äquivalent zu --reply=query)
  • --reply={yes,no,query} Nachfrage bei existierender Zieldatei: immer ja,immer nein, nachfragen
  • -f, --force vor Überschreiben nicht nachfragen (äquivalent zu --reply=yes)
  • -n, --no-clobber nicht überschreiben
  • -u, --update nur neuere oder brandneue Dateien verschieben
    • Die update Option verhindert ein Überschreiben, falls im Zielverzeichnis eine aktuellere Datei existiert

verbose Meldung ausgeben

Bearbeiten

-v, --verbose Erklärung über Abläufe ausgeben

--help diese Hilfe anzeigen und beenden

  • --strip-trailing-slashes Schrägstriche vom Ende jedes QUELLE-Arguments entfernen
  • -S, --suffix=SUFFIX die normale Sicherungs-Erweiterung überschreiben
  • --target-directory=VERZ alle Quellen in Verzeichnis VERZ verschieben
  • --version Versionsinformation anzeigen und beenden

Aufruf:

mv [OPTION]... QUELLE ZIEL

Beispiel

mv AlteDatei NeueDatei

oder:

mv [OPTION]... QUELLE... VERZEICHNIS

oder:

mv [OPTION]... --target-directory=VERZEICHNIS QUELLE...

Umbenennen von QUELLE in ZIEL, oder QUELLE(en) in VERZEICHNIS verschieben

Siehe auch

Bearbeiten

Alternativen

Bearbeiten
  • Alternativ arbeitet man mit dem Konqueror unter KDE
  • Oder man arbeitet mit dem Midnight Commander auf der Konsole
  • Zum Umbenennen und Kopieren gibt es auch den Befehl Copy = cp
  • rsync

Hilfe zum Befehl mv bekommen Sie auf Ihrer Konsole mit:

mv --help

oder

mv --help| less

oder

man mv

Warum funktioniert mv *.txt *.bak nicht?

Wenn man schnell ein paar Dateien eine neue Endung verpassen will, wäre move eigentlich ganz hilfreich. Es funktioniert aber nicht wie gewünscht.

Beispiel

Bearbeiten
touch text1.txt text2.txt

Es werden 2 Dateien mit derselben Endung erstellt. Dann versucht man: mv *.txt *.bak Mit ls schaut man nach, ob es geklappt hat: Leider nicht Ausgabe

text2.txt

Um mehrere Dateien umzubenennen gibt es den Befehl rename. Dabei wird von in allen angegebenen Dateinamen durch nach ersetzt. Also z. B.

ls
text1.txt  text2.txt
rename .txt .bak *.txt
ls

Ausgabe

text1.bak  text2.bak
rename .bak .txt.bak *.bak

ls

text1.txt.bak  text2.txt.bak