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