Mv (Unix)

MV
Originalautor (en) Ken Thompson, Dennis Ritchie
(AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung 3. November 1971; vor 50 Jahren
Betriebssystem Unix, Unix-artig, Inferno, Ibm i
Plattform Plattformübergreifend
Typ Befehl
Lizenz CoreUtils: GPLV3

MV ist ein Unix befehle das sich bewegt ein oder mehr Dateien oder Verzeichnisse von einem Ort zum nächsten. Wenn sich beide Dateinamen im selben Dateisystem befinden, führt dies zu einer einfachen Umbenannung von Dateien. Andernfalls wird der Dateiinhalt an den neuen Speicherort kopiert und die alte Datei entfernt. Bei der Verwendung von MV muss der Benutzer eine Schreibberechtigung für die erhalten Verzeichnisse Die Datei wird zwischen. Dies liegt daran, dass MV den Inhalt beider Verzeichnisse ändert (d.h., die Quelle und das Ziel) am Umzug beteiligt. Bei Verwendung des MV -Befehls für Dateien, die sich im selben Dateisystem befinden, wird der Zeitstempel der Datei nicht aktualisiert.

Auf UNIX -Implementierungen abgeleitet von AT & T UNIX, CP, ln und MV werden als ein einziges Programm mit implementiert hart gebunden Binärdateien. Das Verhalten wird aus dem Pfadnamen ausgewählt argv [0]. Dies ist eine gemeinsame Technik, mit der eng verwandte Befehle, die als Einheit verpackt wurden, dem Benutzer den jeweiligen Verlauf der beabsichtigten Aktion angeben können.

Geschichte

A move Der Befehl, der einen Verzeichniseintrag in ein neues Verzeichnis verschiebt Mehrheit. Es kann an Vertrag genommen werden mv.[1] Später die mv Befehl erschien in Version 1 Unix[2] und wurde Teil der X/Open Portability Guide Ausgabe 2 von 1987.[3] Die Version von MV gebündelt GNU CoreUtils wurde von Mike Parker, David Mackenzie und Jim Meyering geschrieben.[4] Der Befehl ist als separates Paket für verfügbar Microsoft Windows Im Rahmen des Unxutils Sammlung von einheimisch Win32 Häfen von gemeinsamen GNU-Unix-ähnlichen Versorgungsunternehmen.[5] Das MV Der Befehl wurde auch auf die portiert Ibm i Betriebssystem.[6]

Widersprüchliche Datei

Wenn ein Dateiname auf einen vorhandenen Dateinamen verschoben wird, wird die vorhandene Datei gelöscht (verkürzt) standardmäßig. Wenn die vorhandene Datei nicht beschreibbar ist, sich jedoch in einem Verzeichnis befindet, das beschreibbar ist, fordert der MV -Befehl vor dem Fortfahren um Bestätigung (falls aus einem Terminal ausgeführt), es sei denn, die Option -F (Kraft) wird verwendet.

Ein versehentliches Überschreiben kann mit dem GNU verhindert werden -n (langes Format: -No-Clobber) Flagge. Alternative, -U (--aktualisieren) Nur überschreiben Sie Zieldateien, die älter sind als Quelldateien, -ich (-Interaktiv) bittet um Bestätigung für jeden Namenskonflikt, und um eine Bestätigung -b (-Backup) Die Zieldateien umbenannt aus dem Weg.

Es entsteht eine verwandte Unklarheit, wenn ein Dateiname in ein bestehendes Verzeichnis verschoben wird. Standardmäßig, MV Ich würde dies als einen behandeln, der versucht, einen Namen in dieses Verzeichnis zu verschieben. GNU MV hat a -T Wechseln Sie, um diese Annahme zu deaktivieren, und versuchen Sie stattdessen, das Verzeichnis zu überschreiben. Ein inverse -t macht den Vorgang zur Verschleppung explizit.[4]

Bewegen und Kopieren und Entfernen

Verschieben von Dateien innerhalb des gleichen Dateisystem wird im Allgemeinen anders implementiert als das Kopieren der Datei und dann das Original entfernt. Auf Plattformen, die die nicht unterstützen umbenennen SYSCALL, eine neue Verknüpfung wird dem neuen Verzeichnis hinzugefügt und das Original wird gelöscht. Die Daten der Datei werden nicht zugegriffen. Alle Posix-Konformanten Systeme implementieren die umbenennen Anruf.

Eine tatsächliche Bewegung (effektiv umbenannt) ist dramatisch schneller als das Verfahren zur Kopie und Miege. Die i-Anzahl der Datei (kurz für "Inode Nummer ") ändert sich nicht Katalogisierung Informationen, die sich infolge des "Bewegung" geändert haben. Da die Quell- und Zielverzeichnisse geändert werden, werden Einträge in das Zielverzeichnis erstellt und aus dem Quellverzeichnis gelöscht, die Erlaubnis "Schreiben" in beiden Verzeichnissen ist erforderlich, um den Umzug zu vervollständigen. Das Verschieben von Dateien von einem Dateisystem in ein anderes kann vollständig ausfallen oder automatisch als Atom-Kopier- und Delete-Aktion durchgeführt werden. Die tatsächlichen Details hängen von der Implementierung ab.

Das Verschieben eines Verzeichnisses von einem Elternteil in ein anderes übergeordnetes Verzeichnis erfordert die Schreibberechtigung im Verzeichnis, das zusätzlich zu den Berechtigungen zur Änderung der alten und neuen Eltern verlegt wird. Dies liegt daran, dass die I-Anzahl für den Verzeichniseintrag ".." (der in jedem Kontext als Alias ​​für das übergeordnete Verzeichnis verwendet werden kann) infolge der Umbenennung.

Optionen

Die meisten Versionen der MV -Unterstützung:

  • -ich iverarbeiten nteraktiv eine Eingabeaufforderung auf Standart Fehler Vor dem Verschieben einer Datei, die eine vorhandene Datei überschreiben würde. Wenn die Antwort aus der Standardeingabe mit dem Charakter 'y' oder 'y' beginnt, wird der Umzug versucht. (Überschreiben Sie die vorherige Option -F.)
  • -f fORCE Überschreiben des Ziels (überschreiben Sie die vorherige Option -i).

Diese Optionen sind Teil von X/Open -Portabilitätsrichtlinien, später die Grundlage von POSIX und Sus. Alle POSIX-konformen MV-Implementierungen müssen diese unterstützen.[7]

Beispiele

Befehl Erläuterung
MV Myfile mynewfilename Umbenannt 'myfile' in 'mynewFileName'.
MV myfile subdir/myfile bewegt 'myfile' in 'subdir/myfile' relativ zum aktuellen Verzeichnis
MV Myfile Subdir Gleich wie der vorherige Befehl ist der Dateiname impliziert, dass es gleich ist
mv be.03/mnt/bkup/be Kopien 'be montiert Volumen 'Bkup', dann 'BE.03' wird entfernt
mv be.03/*/mnt/bkup/be Das gleiche wie oben, außer dass jede Datei ausgestrahlt wird BE.03 wird indivisch gelöscht, anstatt dass alle sofort gelöscht werden, nachdem das gesamte Kopieren beendet ist.
mv afile ein anderes mydir Verschiebt mehrere Dateien in das Verzeichnis 'mydir'
mv/var/log/*z ~/logs Dies dauert länger als erwartet, wenn sich '/var' auf einem anderen Dateisystem befindet, wie es häufig der Fall ist, da Dateien kopiert und gelöscht werden. Das Hülse erweitert ~ zum Benutzer Heimverzeichnis und Leckereien * Als ein Wildcard -Charakter.

Beachten Sie, dass im obigen Beispiel, /mnt bezogen auf das Verzeichnis (den "Mountspunkt"), über das ein bestimmtes Dateisystem montiert ist. Benennung solcher Verzeichnisse /mnt ist eine beliebte Konvention, ist aber keineswegs notwendig.Ein "Dateisystem" kann als ein unabhängiger Baum angesehen werden, der logischerweise als Einheit angesehen wird.Die Wurzel ist auf einem Verzeichnis der Wahl des Administrators "montiert".Jeder frühere Inhalt dieses Verzeichnisses ist unsichtbar, aber sie werden "wiederhergestellt", wenn das neue Volumen unmontiert ist.

Siehe auch

Verweise

  1. ^ Mehrfachbefehle
  2. ^ MV (1)- -Freebsd Allgemeine Befehle Handbuch
  3. ^ MV: Verschieben von Dateien - Shell- und Dienstprogrammreferenz, Die einzelne Unix -Spezifikation, Version 4 von Die offene Gruppe
  4. ^ a b MV (1)- -Linux Allgemeine Befehle Handbuch
  5. ^ "Native Win32 -Ports einiger GNU -Dienstprogramme". Unxutils.SourceForge.net.
  6. ^ IBM. "IBM System I Version 7.2 Programmierung Qshell" (PDF). Abgerufen 2020-09-05.{{}}: CS1 Wartung: URL-Status (Link)
  7. ^ Single Unix -Spezifikation#1980er Jahre: Motivation

Externe Links