Linux-Praxisbuch/ mv
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 move 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 3 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 rootrechte 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 Kopiervorgang eine Meldung und können verfolgen, was Ihr Computer getan hat.
mv -v 1.txt 2.txt
Meldung:
,,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 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
update Bearbeiten
- -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 Bearbeiten
--help diese Hilfe anzeigen und beenden
andere Bearbeiten
- --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
Syntax Bearbeiten
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 Bearbeiten
Hilfe zum Befehl mv bekommen Sie auf Ihrer Konsole mit:
mv --help
oder
mv --help| less
oder
man mv
Fragen Bearbeiten
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 von nach dateien. 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