Zum Inhalt springen

Linux-Praxisbuch/ mv

Aus Wikibooks

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 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
[Bearbeiten]