Das Verschieben von Dateien unter Linux kann relativ einfach erscheinen, es stehen jedoch mehr Optionen zur Verfügung, als die meisten erkennen. Dieser Artikel lehrt Anfänger, wie Dateien in der GUI und auf der Kommandozeile zu bewegen, sondern auch erklärt, was tatsächlich unter der Haube geschieht, und adressiert Befehlszeilenoptionen, die viele erfahrene Benutzer selten erforscht haben.

Was bewegen?

Bevor Sie sich mit dem Verschieben von Dateien befassen, sollten Sie sich genauer ansehen, was beim Verschieben von Dateisystemobjekten tatsächlich passiert., Wenn eine Datei erstellt wird, wird sie einem Inode zugewiesen, einem festen Punkt in einem Dateisystem, der für die Datenspeicherung verwendet wird. Sie können inode mit dem Befehl ls einer Datei zuordnen:

$ ls --inode example.txt
7344977 example.txt

Wenn Sie eine Datei verschieben, verschieben Sie die Daten nicht von einem Inode in einen anderen, sondern weisen dem Dateiobjekt nur einen neuen Namen oder Dateipfad zu. Tatsächlich behält eine Datei ihre Berechtigungen bei, wenn sie verschoben wird, da das Verschieben einer Datei sie nicht ändert oder neu erstellt.

Datei – und Verzeichnisinodes implizieren niemals Vererbung und werden vom Dateisystem selbst diktiert., Die Inode-Zuweisung erfolgt sequentiell basierend auf dem Zeitpunkt der Erstellung der Datei und ist völlig unabhängig davon, wie Sie Ihren Computer organisieren. Eine Datei „innerhalb“ eines Verzeichnisses hat möglicherweise eine niedrigere Inode-Nummer als das übergeordnete Verzeichnis oder eine höhere. Beispiel:

$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt

Beim Verschieben einer Datei von einer Festplatte auf eine andere ändert sich der Inode jedoch sehr wahrscheinlich. Dies geschieht, weil die neuen Daten in ein neues Dateisystem geschrieben werden müssen. Aus diesem Grund ist das Verschieben und Umbenennen von Dateien unter Linux buchstäblich dieselbe Aktion., Unabhängig davon, ob Sie eine Datei in ein anderes Verzeichnis oder in dasselbe Verzeichnis mit einem neuen Namen verschieben, werden beide Aktionen vom selben zugrunde liegenden Programm ausgeführt.

Dieser Artikel konzentriert sich auf das Verschieben von Dateien von einem Verzeichnis in ein anderes.

Bewegen mit der Maus

Die GUI ist eine freundliche und für die meisten Menschen vertraute Abstraktionsebene auf einer komplexen Sammlung von Binärdaten. Es ist auch die erste und intuitivste Möglichkeit, Dateien unter Linux zu verschieben. Wenn Sie an die Desktop-Erfahrung im allgemeinen Sinne gewöhnt sind, wissen Sie wahrscheinlich bereits, wie Sie Dateien auf Ihrer Festplatte verschieben., Auf dem GNOME-Desktop besteht beispielsweise die Standardaktion beim Ziehen und Ablegen einer Datei von einem Fenster in ein anderes darin, die Datei zu verschieben, anstatt sie zu kopieren, daher handelt es sich wahrscheinlich um eine der intuitivsten Aktionen auf dem Desktop:

Der Dolphin-Dateimanager auf dem KDE Plasma-Desktop fordert den Benutzer standardmäßig zur Aktion auf. Wenn Sie die Umschalttaste gedrückt halten, während Sie eine Datei ziehen, wird eine Verschiebungsaktion erzwingt:

Verschieben in der Befehlszeile

Der Shell-Befehl zum Verschieben von Dateien unter Linux, BSD, Macos, Solaris und macOS ist deaktiviert., Ein einfacher Befehl mit einer vorhersagbaren Syntax, mv <source> <destination> verschiebt eine Quelldatei an das angegebene Ziel, das jeweils entweder durch einen absoluten oder relativen Dateipfad definiert ist. Wie bereits erwähnt, ist mv ein so verbreiteter Befehl für POSIX-Benutzer, dass viele seiner zusätzlichen Modifikatoren im Allgemeinen unbekannt sind, sodass dieser Artikel Sie auf einige nützliche Modifikatoren aufmerksam macht, unabhängig davon, ob Sie neu oder erfahren sind.,

Nicht alle mv-Befehle wurden jedoch von denselben Personen geschrieben, sodass Sie je nach Betriebssystem GNU mv, BSD mv oder Sun mv haben können. Befehlsoptionen unterscheiden sich von Implementierung zu Implementierung (BSD mv hat überhaupt keine langen Optionen), also beziehen Sie sich auf Ihre mv-Manpage, um zu sehen, was unterstützt wird, oder installieren Sie stattdessen Ihre bevorzugte Version (das ist der Luxus von Open Source).,

Verschieben einer Datei

Um eine Datei mit mv von einem Ordner in einen anderen zu verschieben, denken Sie an die Syntax mv <source> <destination>. Zum Beispiel, um die Datei Beispiel zu verschieben.txt in Ihr Dokumentenverzeichnis:

$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt

Genau wie beim Verschieben einer Datei durch Ziehen und Ablegen auf ein Ordnersymbol ersetzt dieser Befehl Dokumente nicht durch Beispiel.txt. Stattdessen erkennt mv, dass Dokumente ein Ordner sind, und platziert das Beispiel.txt-Datei hinein.,

Sie können die Datei auch bequem umbenennen, während Sie sie verschieben:

$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt

Das ist wichtig, da Sie eine Datei umbenennen können, auch wenn Sie sie nicht an einen anderen Ort verschieben möchten:

$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt

Verschieben eines Verzeichnisses

Der Befehl mv unterscheidet eine Datei nicht von einem Verzeichnis wie cp., Sie können ein Verzeichnis oder eine Datei mit derselben Syntax verschieben:

$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents

Verschieben einer Datei sicher

Wenn Sie eine Datei in ein Verzeichnis kopieren, in dem bereits eine gleichnamige Datei vorhanden ist, ersetzt der Befehl mv standardmäßig die Zieldatei durch die Zieldatei, die Sie verschieben. Dieses Verhalten wird Clobbering genannt, und manchmal ist es genau das, was Sie beabsichtigen. Andere Male ist es nicht.

Einige Distributionen Alias (oder Sie könnten Ihre eigenen schreiben) mv zu mv — interactive, die Sie zur Bestätigung auffordert. Einige nicht., In jedem Fall können Sie die Option –interactive oder-i verwenden, um sicherzustellen, dass mv nach Bestätigung fragt, falls zwei Dateien mit demselben Namen in Konflikt stehen:

$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?

Wenn Sie nicht manuell eingreifen möchten, verwenden Sie stattdessen –no-clobber oder-n. Dieses Flag lehnt die Bewegungsaktion im Konfliktfall stillschweigend ab. In diesem Beispiel eine Datei mit dem Namen example.,txt existiert bereits in ~/Documents, daher wird es nicht wie angewiesen aus dem aktuellen Verzeichnis verschoben:

$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt

Verschieben mit Backups

Wenn Sie GNU mv verwenden, gibt es Sicherungsoptionen, die ein anderes Mittel zum sicheren Verschieben bieten. Verwenden Sie zum Erstellen einer Sicherung einer widersprüchlichen Zieldatei die Option-b:

$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~

Dieses Flag stellt sicher, dass mv die Verschiebungsaktion abschließt, schützt aber auch alle bereits vorhandenen Dateien am Zielspeicherort.,

Eine weitere GNU-Sicherungsoption ist –backup, die ein Argument verwendet, das definiert,wie die Sicherungsdatei benannt wird:

  • existing: Wenn nummerierte Sicherungen bereits im Ziel vorhanden sind, wird eine nummerierte Sicherung erstellt. Andernfalls wird das einfache Schema verwendet.
  • none: Erstellt keine Sicherung, auch wenn –backup gesetzt ist. Diese Option ist nützlich, um einen mv-Alias zu überschreiben, der die Sicherungsoption festlegt.
  • nummeriert: Hängt die Zieldatei mit einer Nummer an.,
  • einfach: Hängt die Zieldatei mit einem ~ an, das bequem mit der Option –ignore-backups für ls aus Ihrer täglichen Ansicht ausgeblendet werden kann.

Beispiel:

Mit der Umgebungsvariablen VERSION_CONTROL kann ein Standardsicherungsschema festgelegt werden. Sie können Umgebungsvariablen in Ihrem ~ / festlegen.bashrc-Datei oder dynamisch vor Ihrem Befehl:

Die Option –backup respektiert weiterhin die Option –interactive oder-i, sodass Sie weiterhin aufgefordert werden, die Zieldatei zu überschreiben, obwohl zuvor eine Sicherung erstellt wird:

Sie können-i mit der Option –force oder-f überschreiben.,

Die Option –backup ist in BSD mv nicht verfügbar.

Verschieben vieler Dateien auf einmal

Beim Verschieben mehrerer Dateien behandelt mv das endgültige Verzeichnis als Ziel:

Wenn das letzte Element kein Verzeichnis ist, gibt mv einen Fehler zurück:

$ mv foo bar baz
mv: target 'baz' is not a directory

Die Syntax von GNU mv ist ziemlich flexibel., Wenn Sie den Befehl mv nicht mit dem Ziel als letztes Argument angeben können, verwenden Sie die Option –target-directory oder-t:

Dies ist besonders nützlich, wenn Sie mv-Befehle aus der Ausgabe eines anderen Befehls erstellen, z. B. dem Befehl find, xargs oder GNU Parallel.

Verschieben basierend auf mtime

Mit GNU mv können Sie eine Verschiebungsaktion definieren, die darauf basiert, ob die zu verschiebende Datei neuer als die Zieldatei ist, die sie ersetzen würde., Diese Option ist mit der Option –update oder-u möglich und in BSD mv nicht verfügbar:

Dieses Ergebnis basiert ausschließlich auf der Änderungszeit der Dateien, nicht auf einem Diff der beiden Dateien. Es ist leicht, mv mit einem bloßen Touch-Befehl zu täuschen:

Offensichtlich ist dies nicht die intelligenteste verfügbare Update-Funktion, bietet aber einen grundlegenden Schutz gegen das Überschreiben der letzten Daten.

Verschieben

Es gibt mehr Möglichkeiten, Daten zu verschieben als nur den Befehl mv, aber als Standardprogramm für den Job ist mv eine gute universelle Option., Jetzt, da Sie wissen, welche Optionen Sie zur Verfügung haben, können Sie mv intelligenter als je zuvor verwenden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.