Linux / Befehle / cp - Befehl zum Kopieren, mv - Befehl zum Verschieben
Unter Linux kopiert cp Dateien oder Verzeichnisse, und mv verschiebt Dateien oder Verzeichnisse bzw. benennt sie um. Das Ergebnis beider Befehle hängt davon ab, ob der endgültige Pfad ein vorhandenes Verzeichnis ist, daher sollten Sie den Zielpfad vor der Ausführung überprüfen.
Unterschied zwischen Kopieren und Verschieben
Die grundlegenden Formate der beiden Befehle sind cp source destination und mv source destination. Kopieren erstellt eine separate Kopie des Originals, während Verschieben oder Umbenennen das Element nach erfolgreicher Ausführung vom ursprünglichen Pfad entfernt. Die folgenden Beispiele basieren auf den GNU coreutils' cp und mv.
Vorhandene Dateien können mit demselben Namen überschrieben werden, daher sollten Pfad und Zielinhalt überprüft und notwendige Sicherungen erstellt werden, bevor wichtige Daten bearbeitet werden. Die folgende Übung wird in einem neu erstellten, leeren Verzeichnis durchgeführt.
Vorbereitung der Übungsdateien
Das Folgende ist ein Beispiel, wenn das Verzeichnis cp-mv-practice im aktuellen Speicherort noch nicht existiert. Wenn bereits ein Verzeichnis mit demselben Namen existiert, üben Sie an einem anderen leeren Ort. Wenn der erste Befehl fehlschlägt, fahren Sie nicht mit den nachfolgenden Befehlen fort.
mkdir cp-mv-practice
cd cp-mv-practice
printf 'Hello Linux\n' > note.txt
mkdir target
ls
Die Datei note.txt und ein leeres Verzeichnis target werden angezeigt. Die nachfolgenden Beispiele werden in dieser Reihenfolge in diesem Verzeichnis ausgeführt. > von printf wird Inhalte überschreiben, wenn eine Datei mit demselben Namen existiert, daher sollte es an einem Ort ohne echte Daten verwendet werden.
Dateien kopieren
Der folgende Befehl kopiert note.txt nach copy.txt im aktuellen Verzeichnis. Wenn erfolgreich, existieren sowohl das Original als auch die Kopie.
cp note.txt copy.txt
ls
cat copy.txt
cat zeigt den Inhalt der Kopie, Hello Linux. Der folgende Befehl kopiert sie in das vorhandene Verzeichnis target mit dem ursprünglichen Namen.
cp note.txt target/
ls target
Wenn der angegebene Zielname kein vorhandenes Verzeichnis ist, kann eine Datei mit diesem Namen erstellt oder eine vorhandene Datei überschrieben werden. Daher kopiert cp note.txt target die Datei in target, wenn dieses ein Verzeichnis ist, aber wenn es nicht existiert, wird eine Datei namens target erstellt. Um sie unter einem anderen Namen in einem Verzeichnis zu kopieren, geben Sie den vollständigen Zielpfad wie in cp note.txt target/other.txt angegeben an.
Verzeichnisse kopieren
Verwenden Sie die rekursive Option -r, wenn Sie ein Verzeichnis und seinen Inhalt kopieren. Der folgende Befehl kopiert das zuvor erstellte Verzeichnis target nach target-copy, das noch nicht existiert.
cp -r target target-copy
ls target-copy
Infolgedessen wird target-copy/note.txt erstellt und das ursprüngliche target/note.txt bleibt bestehen. Umgekehrt, wenn das Zielverzeichnis bereits existiert, wird das ursprüngliche Verzeichnis normalerweise darin abgelegt. Zum Beispiel kann das erneute Ausführen von cp -r target target-copy target-copy/target erstellen. Überprüfen Sie das Ziel mit ls, bevor Sie es ausführen.
GNU cp -a versucht, Attribute wie Links, Berechtigungen und Zeitstempel bei rekursiven Kopien so weit wie möglich zu erhalten. Nicht alle Attribute können je nach Berechtigungen oder Unterstützung des Ziel-Dateisystems garantiert erhalten bleiben. Die Handhabung von symbolischen Links variiert ebenfalls je nach Optionen, daher sollten wichtige Daten nach dem Kopieren überprüft werden. Weitere Details finden Sie im GNU cp-Handbuch.
Dateien verschieben und umbenennen
Der folgende Befehl benennt das zuvor erstellte copy.txt in renamed.txt um. Wenn erfolgreich, ist copy.txt verschwunden und renamed.txt wird angezeigt.
mv copy.txt renamed.txt
ls
Als Nächstes verschieben Sie die Datei in ein vorhandenes Verzeichnis. renamed.txt existiert nicht mehr an seinem ursprünglichen Speicherort, und target/renamed.txt wird erstellt.
mv renamed.txt target/
ls target
Beim Verschieben oder Umbenennen eines Verzeichnisses verwenden Sie mv, und -r von cp ist nicht erforderlich. Wenn das Zielverzeichnis bereits existiert, wird es hineingeschoben, und wenn das Ziel nicht existiert, wird es unter dem angegebenen Namen verschoben. Wenn ein Konflikt mit einem bestehenden nicht-leeren Verzeichnis besteht, kann es fehlschlagen, also gehen Sie nicht davon aus, dass es sich wie eine Kopie zusammenführt.
Zwischen verschiedenen Dateisystemen kann GNU mv dies handhaben, indem die Originaldatei nach dem Kopieren gelöscht wird. Große Datenmengen können Zeit in Anspruch nehmen, und wenn es mitten im Vorgang fehlschlägt, wird möglicherweise nur ein Teil verschoben. Überprüfen Sie daher die Ergebnisse auf beiden Seiten. Die detaillierten Bedingungen können Sie im GNU mv-Handbuch nachlesen.
Überprüfungen von Überschreibung und Pfadfehlern
Um eine Bestätigung vor dem Überschreiben einer bestehenden Datei zu erhalten, verwenden Sie -i. Im Folgenden ist ein Beispielszenario dargestellt, in dem eine Datei mit demselben Namen bereits existiert. Wenn Anweisungen erscheinen, lesen Sie diese und genehmigen Sie nur, wenn Sie tatsächlich überschreiben möchten.
cp -i note.txt target/note.txt
mv -i fragt auch vor dem Ersetzen einer bestehenden Zieldatei nach. Interaktive Bestätigung ersetzt keine Konfliktbehandlung in automatisierten Skripten, daher sollten in Skripten das beabsichtigte Verhalten und der Exit-Status separat überprüft werden. Das Standardverhalten kann in Umgebungen, in denen Befehle als Aliase festgelegt sind, unterschiedlich sein.
- Wenn Leerzeichen im Pfad sind: Jeden Pfad in Anführungszeichen setzen, wie in
cp "my file.txt" "target/my file.txt". - Wenn eine Datei oder ein Verzeichnis nicht gefunden werden kann: Den aktuellen Speicherort, die Rechtschreibung und die Groß-/Kleinschreibung mithilfe von
pwdundlsüberprüfen. - Wenn ein Berechtigungsfehler auftritt: Überprüfen Sie, ob Sie Leseberechtigung für die Quelle und Schreibberechtigung für das Ziel haben, und prüfen Sie auch die erforderlichen Berechtigungen im Quellverzeichnis beim Verschieben. Wenn Sie keine Berechtigungen haben, fordern Sie diese beim Administrator an.
Nach der Überprüfung der praktischen Ergebnisse können Sie bei Bedarf das Verzeichnis cp-mv-practice mit einem Dateiverwaltungstool entfernen. Es gibt auch Tools wie Midnight Commander die das Kopieren und Verschieben von Dateien ermöglichen, während die Dateiliste angezeigt wird. Ob sie jedoch auf dem Server installiert sind und die Nutzungsberechtigungen, hängt von der Umgebung ab.




