- mv (Unix)
-
mv (engl. Abkürzung für move) ist ein Unix-Befehl, der eine oder mehrere Dateien oder Verzeichnisse von einem Ort zum anderen verschiebt. Damit vereint das Programm die beiden von einem Computerbenutzer intuitiv als verschieden wahrgenommenen Aktionen des Umbenennens und des Verschiebens von Dateien zwischen verschiedenen Verzeichnissen.
Um die Arbeitsweise von mv zu verstehen, ist eine Fallunterscheidung nötig, ob es sich bei dem Quell-/Zielverzeichnis um die gleichen oder um verschiedene Geräte handelt. Dank des Unix-Konzepts des transparenten Mountens von Dateisystemen bzw. Partitionen in beliebige existierende Verzeichnisse muss mv in der Lage sein, zum einen Dateien auf dem gleichen Dateisystem einfach umzubenennen (aus /mnt/diskette/ordner/datei1 wird z. B. /mnt/diskette/anderer_ordner/datei1) sowie andererseits Dateien von einem Dateisystem zum anderen zu befördern. Dazu wird die Originaldatei unter dem anderen Namen auf die Zielpartition kopiert und anschließend vom ursprünglichen Datenträger gelöscht. Diese unterschiedlichen Arbeitsabläufe haben unterschiedlich viel Arbeitsaufwand zur Folge: Das Verschieben von Dateien in einem einzigen Dateisystem geht bei den meisten Dateisystemen sehr schnell, wohingegen das Verschieben auf ein anderes Dateisystem mehr Zeit in Anspruch nimmt, weil in Wirklichkeit ein Löschzugriff sowie ein Schreibzugriff stattfindet.
Selbstverständlich sind zum Verschieben von Dateien Schreibrechte sowohl im Quell- als auch Zielverzeichnis nötig.
Inhaltsverzeichnis
Verwendung
Der Syntax von mv funktioniert analog zu cp:
mv quelldatei zieldatei
Mehrere Dateien können gleichzeitig in ein Zielverzeichnis verschoben werden:
mv quelldateien ... zielverzeichnis
Konflikte bei existierenden Zieldateien
Wenn eine Datei zu einem Dateinamen einer bereits existierenden Datei verschoben wird, so wird letztere gelöscht. Wenn für die existierende Zieldatei keine Schreibrechte vorhanden sind, für das Verzeichnis der Zieldatei allerdings schon, dann fragt mv interaktiv nach, ob er die Datei überschreiben soll, wenn der Parameter -f (für force) nicht gesetzt ist:
$ ls -l insgesamt 0 -rw-r--r-- 1 sven users 0 22. Apr 22:51 a.txt drwxr-xr-x 2 sven users 72 22. Apr 22:51 ziel $ ls -l ziel/ insgesamt 0 -r--r--r-- 1 sven users 0 22. Apr 22:51 a.txt $ mv a.txt ziel mv: Überschreiben von »ziel/a.txt«, über Modus 0444 hinwegsetzen?
Abgrenzung zum Kopieren und Löschen von Dateien
Es sei angemerkt, dass normalerweise das Verschieben von Dateien im gleichen Dateisystem nicht identisch ist mit der Aktion des Kopierens dieser Datei und dem anschließenden Löschen des Originals. Beim Verschieben einer Datei auf dem gleichen Dateisystem wird in Unix-Dateisystemen einfach der Hardlink der Datei aus dem Quellverzeichnis entfernt und ein neuer zum Zielverzeichnis hinzugefügt. Dabei bleibt die Datei (der Inode) selbst unberührt, d.h. der Inode und damit die Position der Datei auf dem Speichermedium ändert sich nicht.
Durch diesen Zusammenhang erklären sich auch die Verhältnisse der Dateirechte: Man kann eine Datei, auf die man keinen Lesezugriff hat, nicht kopieren, aber man kann sie verschieben (vorausgesetzt man hat Schreibrechte im Original- und Zielverzeichnis, siehe oben). Analog ist die Denkweise bei Verzeichnissen: Es sei ein mit Dateien gefülltes Verzeichnis gegeben, auf deren Dateien man keine Schreibrechte hat. Entsprechend darf man das Verzeichnis nicht löschen, da die Berechtigung fehlt, die Inhalte zu löschen. Trotzdem kann man aber das Verzeichnis selbst verschieben.
Siehe auch
- cp, zum Kopieren von Dateien auf Unix (weitgehend identische Syntax)
- rm, zum Löschen von Dateien auf Unix
Weblinks
Kategorien:- Unix-Software
- GNU core utilities
Wikimedia Foundation.