• Allgemein
  • Verzeichnis kopieren unter Linux: Befehle und Anleitungen für die effiziente Dateiorganisation

Verzeichnis kopieren unter Linux: Befehle und Anleitungen für die effiziente Dateiorganisation

Kopieren von Verzeichnissen mit cp: Syntax und Optionen

Das Kopieren von Verzeichnissen unter Linux ist mit dem cp-Befehl möglich. Die Syntax für die Verzeichniskopie lautet wie folgt:

cp [Optionen] Quelle Ziel

Dabei sind Quelle und Ziel die Pfade zum Quell- und Zielverzeichnis.

Optionen

Der cp-Befehl bietet eine Vielzahl von Optionen, um die Kopieroperation anzupassen. Die wichtigsten Optionen sind:

-r, –recursive: Kopiert das Verzeichnis rekursiv, d. h. alle Unterverzeichnisse und Dateien werden ebenfalls kopiert.
-p, –preserve: Erhält die Dateiberechtigungen, den Zeitstempel und andere Metadaten der Quelldateien.
-a, –archive: Eine Kombination aus -r, -p und -v. Kopiert das Verzeichnis rekursiv, erhält Metadaten und zeigt den Fortschritt an.
-v, –verbose: Zeigt den Fortschritt der Kopieroperation an.
–update: Kopiert nur Dateien, die neuer sind als die entsprechenden Dateien im Zielverzeichnis.

Beispiel

Um ein Verzeichnis namens Quelle in ein Verzeichnis namens Ziel zu kopieren, würdest du folgenden Befehl verwenden:

cp -r Quelle Ziel

Wenn du die Metadaten der Dateien erhalten möchtest, kannst du die Option -p verwenden:

cp -rp Quelle Ziel

Weitere Informationen zu den Optionen des cp-Befehls findest du in der Man-Page:

man cp

Rekursive Verzeichniskopie mit dem Schalter -r

Möchtest du ein Verzeichnis und seinen gesamten Inhalt kopieren, ist der Schalter -r (rekursiv) unerlässlich. Er weist den Befehl cp an, alle Unterverzeichnisse und Dateien des Quellverzeichnisses zu kopieren und im Zielverzeichnis nachzubilden.

Syntax

Die Syntax für die rekursive Verzeichniskopie mit cp lautet:

cp -r quelle ziel
  • quelle: Der Pfad zum Quellverzeichnis, das kopiert werden soll
  • ziel: Der Pfad zum Zielverzeichnis, in das der Inhalt kopiert werden soll

Optionen

Der Schalter -r kann mit zusätzlichen Optionen kombiniert werden, um die Kopieraktion zu steuern:

  • -a (Archiv): Bewahrt Attribute wie Zeitstempel, Berechtigungen und Besitzer
  • -d (Symbolische Links kopieren): Kopiert symbolische Links als Links statt als Ziel
  • -l (Symlinks folgen): Dereferenziert symbolische Links und kopiert deren Ziel
  • --no-dereference: Kopiert symbolische Links als Links, ohne ihnen zu folgen
  • --preserve=links: Erstellt Hardlinks auf Dateien, anstatt sie zu kopieren
  • --preserve=all: Bewahrt alle Dateisystemattribute, einschließlich Zugriffssteuerungslisten (ACLs) und erweiterten Attribute

Beispiel

Hier ein Beispiel für die rekursive Kopie des Verzeichnisses mein_verzeichnis in das Verzeichnis neues_verzeichnis unter Beibehaltung der Dateiberechtigungen:

cp -ra mein_verzeichnis neues_verzeichnis

Fehlerbehebung

Bei der Verwendung des Schalters -r können folgende Probleme auftreten:

  • Zielverzeichnis existiert nicht: Erstelle das Zielverzeichnis, bevor du den Befehl cp ausführst.
  • Berechtigungsfehler: Stelle sicher, dass du über Schreibberechtigungen für das Zielverzeichnis verfügst.
  • Speicherplatzprobleme: Überprüfe, ob der Speicherplatz auf dem Ziellaufwerk ausreicht, um das Verzeichnis unterzubringen.
  • Gerätemangel: Vergewissere dich, dass das Quell- und das Zielverzeichnis auf demselben Dateisystem gemountet sind.

Verzeichniskopie mit Erhaltung der Dateiberechtigungen

Beim Kopieren von Verzeichnissen ist es oft wichtig, die Dateiberechtigungen im Zielverzeichnis zu erhalten. Standardmäßig kopiert der Befehl cp die Dateien mit den Berechtigungen des Benutzers, der den Befehl ausführt. Dies kann jedoch zu Problemen führen, wenn die Berechtigungen der Quelldateien von denen des Ziels abweichen.

Um die Dateiberechtigungen beizubehalten, musst du die Option -p verwenden. Sie weist den Befehl cp an, die Dateiberechtigungen der Quelldateien beizubehalten.

Syntax

cp -p quelle ziel

Beispiel

Im folgenden Beispiel wird das Verzeichnis quellenverzeichnis in das Verzeichnis zielverzeichnis kopiert, wobei die Dateiberechtigungen beibehalten werden:

cp -p quellenverzeichnis zielverzeichnis

Häufig gestellte Fragen

Was passiert, wenn ich die Option -p nicht verwende?

Wenn du die Option -p nicht verwendest, werden die Dateien mit den Berechtigungen des Benutzers kopiert, der den Befehl ausführt. Dies kann zu Problemen führen, wenn der Benutzer, der die Dateien kopiert, nicht über die erforderlichen Berechtigungen zum Schreiben in das Zielverzeichnis verfügt.

Kann ich die Option -p auch mit anderen Optionen verwenden?

Ja, die Option -p kann mit anderen Optionen verwendet werden, z. B. -r (rekursiv) und -v (ausführlich).

Wie kann ich die Dateiberechtigungen der kopierten Dateien überprüfen?

Du kannst die Dateiberechtigungen der kopierten Dateien mit dem Befehl ls -l überprüfen.

Kopieren von Verzeichnissen in versteckte Ziele

Wenn du ein Verzeichnis in ein verstecktes Ziel kopieren möchtest, das mit einem Punkt (.) beginnt, musst du einige zusätzliche Schritte unternehmen.

Problemumgehung mit der Option "-a"

Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, die Option -a (oder --archive) zu verwenden. Diese Option weist cp an, alle Attribute der Quelldateien zu kopieren, einschließlich versteckter Dateien und Verzeichnisse.

cp -a quelle/ ziel/.verstecktes_ziel/

Verwendung der Option "-R" mit versteckten Dateien

Alternativ kannst du die Option -R (oder --recursive) in Verbindung mit der Option -H (oder --dereference) verwenden. -H weist cp an, symbolische Links zu dereferenzieren, während -R es rekursiv in alle Unterverzeichnisse kopiert, einschließlich versteckter Verzeichnisse.

cp -RH quelle/ ziel/.verstecktes_ziel/

Einschränkungen beachten

Denke daran, dass einige versteckte Dateien und Verzeichnisse aufgrund von Systemberechtigungsbeschränkungen möglicherweise nicht kopiert werden können. Überprüfe die Berechtigungen der Quelldateien und vergewissere dich, dass du über die erforderlichen Berechtigungen zum Lesen und Kopieren verfügst.

Verwendung von "find" und "xargs"

Wenn du eine komplexere Verzeichnisstruktur mit versteckten Dateien und Verzeichnissen kopieren musst, kannst du die Befehle find und xargs verwenden. Mit find kannst du nach versteckten Dateien suchen, und xargs kannst du diese Dateien an cp übergeben.

find quelle/ -type d -name '.*' | xargs -I{} cp -a {} ziel/.verstecktes_ziel/

Diese Methode ermöglicht es dir, auch verschlüsselte oder schreibgeschützte Dateien und Verzeichnisse zu kopieren.

Verzeichniskopie mit Fortschrittsanzeige

Wenn du ein Verzeichnis mit einer großen Anzahl von Dateien kopierst, kann es hilfreich sein, den Fortschritt des Kopiervorgangs zu verfolgen. Dies kann dir eine Vorstellung davon geben, wie lange der Vorgang noch dauern wird und ob es irgendwelche Probleme gibt.

Um eine Fortschrittsanzeige für eine Verzeichniskopie zu verwenden, kannst du die Option -v verwenden. Diese Option weist den cp-Befehl an, den Fortschritt des Kopiervorgangs in der Konsole auszugeben.

cp -v quelle ziel

Die Ausgabe der Fortschrittsanzeige enthält Informationen wie den Namen der aktuell kopierten Datei, die Größe der Datei und den Prozentsatz des abgeschlossenen Kopiervorgangs.

cp: 100% |████████████████████████████████████████████████████| 10240/10240 [00:00<00:00, 9482.35B/s]

Wenn du eine noch detailliertere Fortschrittsanzeige wünschst, kannst du die Option -V verwenden. Diese Option weist den cp-Befehl an, zusätzliche Informationen wie die geschätzte verbleibende Zeit und die Übertragungsrate auszugeben.

cp -V quelle ziel

Die Ausgabe der detaillierten Fortschrittsanzeige enthält Informationen wie:

  • Den Namen der aktuell kopierten Datei
  • Die Größe der Datei
  • Den Prozentsatz des abgeschlossenen Kopiervorgangs
  • Die geschätzte verbleibende Zeit
  • Die Übertragungsrate
cp: 100% |████████████████████████████████████████████████████| 10240/10240 [00:00<00:00, 9482.35B/s] ETA 00:00

Die Verwendung einer Fortschrittsanzeige kann dir helfen, den Fortschritt einer Verzeichniskopie zu verfolgen und etwaige Probleme zu identifizieren.

Verzeichniskopie mit Synchronisation alter und neuer Dateiattribute

Wenn du ein Verzeichnis kopierst, möchtest du möglicherweise sicherstellen, dass die Dateiattribute des neuen Verzeichnisses mit denen des ursprünglichen Verzeichnisses übereinstimmen. Dies kannst du mit der Option --preserve erreichen, die alle Attribute wie Zeitstempel, Berechtigungen und Besitz kopiert.

h3. Zeitstempel

Standardmäßig kopiert der Befehl cp nur den Zeitstempel der letzten Änderung der Datei. Um auch den Zugriffs- und Änderungszeitpunkt zu kopieren, kannst du die Option --preserve=timestamps verwenden.

h3. Berechtigungen

Die Option --preserve=mode kopiert die Berechtigungen der Dateien und Verzeichnisse im Quellverzeichnis in das Zielverzeichnis.

h3. Besitz

Mit der Option --preserve=ownership kannst du festlegen, dass der Besitz der Dateien und Verzeichnisse im Zielverzeichnis dem des Quellverzeichnisses entspricht.

Beispiel

Um ein Verzeichnis namens "alt" mit allen Attributen in ein Verzeichnis namens "neu" zu kopieren, verwendest du den folgenden Befehl:

cp --preserve=all alt neu

Zusätzliche Hinweise

  • Die Option --preserve kann mit anderen Optionen wie -r und -v kombiniert werden.
  • Die Option --no-preserve kann verwendet werden, um das Kopieren von Attributen zu verhindern.
  • Wenn du nur bestimmte Attribute kopieren möchtest, kannst du mehrere --preserve-Optionen angeben, z. B. --preserve=timestamps und --preserve=ownership.

Verzeichniskopie mit Ausschluss bestimmter Dateien oder Verzeichnisse

Manchmal möchtest du möglicherweise nur einen Teil der Dateien oder Verzeichnisse innerhalb eines Quellverzeichnisses kopieren. Mittels der Option --exclude kannst du bestimmte Dateien oder Verzeichnisse vom Kopiervorgang ausschließen.

Syntax

cp [Optionen] --exclude <Ausschluss-Muster> <Quellverzeichnis> <Zielverzeichnis>

Verwendung

Um beispielsweise alle Dateien mit der Endung .txt aus dem Quellverzeichnis my-source-dir auszuschließen und in das Zielverzeichnis my-target-dir zu kopieren, verwendest du folgenden Befehl:

cp -r --exclude *.txt my-source-dir my-target-dir

Du kannst mehrere Ausschluss-Muster angeben, indem du sie durch Leerzeichen trennst. So schließt du beispielsweise sowohl .txt-Dateien als auch das Verzeichnis temp aus:

cp -r --exclude *.txt --exclude temp my-source-dir my-target-dir

Wildcards

Du kannst in Ausschluss-Mustern Wildcards verwenden, um eine Übereinstimmung mit einer Vielzahl von Dateien oder Verzeichnissen zu erzielen.

  • *: Übereinstimmung mit beliebig vielen Zeichen
  • ?: Übereinstimmung mit einem einzelnen Zeichen
  • []: Übereinstimmung mit einem Zeichen aus einer Menge
  • {}: Übereinstimmung mit einer Option aus mehreren Alternativen

Beispiel

Um alle Dateien und Verzeichnisse in my-source-dir außer dem Verzeichnis bin und allen Dateien mit der Endung .log zu kopieren, verwendest du folgenden Befehl:

cp -r --exclude bin --exclude *.log my-source-dir my-target-dir

Weitere Optionen

Die Option --exclude-from=<Datei> ermöglicht es dir, Ausschluss-Muster aus einer Datei zu lesen, was bei komplexeren Ausschlussregeln nützlich sein kann.

Die Option --no-preserve=all kann zusammen mit --exclude verwendet werden, um die Beibehaltung bestimmter Metadaten während des Kopiervorgangs zu verhindern.

Verwende man cp auf deinem Linux-System für weitere Informationen und eine vollständige Liste der Optionen.

Verzeichniskopie mit der Option –link: Erstellung von Hardlinks

Mit der Option --link kannst du bei der Verzeichniskopie Hardlinks anstelle von Kopien der Dateien erstellen. Dadurch werden die Originaldaten beibehalten und die Speicherplatznutzung reduziert. Hardlinks können nur für Dateien innerhalb desselben Dateisystems erstellt werden.

Vorteile von Hardlinks

  • Speicherplatzeinsparung: Hardlinks verweisen auf die Originaldateien, anstatt neue Kopien zu erstellen. Dies kann erheblichen Speicherplatz sparen, insbesondere bei großen Dateien.
  • Schnellere Übertragungen: Das Erstellen von Hardlinks ist schneller als das Kopieren von Dateien, da keine neuen Daten übertragen werden müssen.
  • Konsistenz: Änderungen an der ursprünglichen Datei werden automatisch in allen verlinkten Dateien widergespiegelt.

Syntax

Um ein Verzeichnis mit der Option --link zu kopieren, verwende folgende Syntax:

cp --link [-H|-L] [-P] [-d] source_dir target_dir

wobei:

  • --link: Die Option zum Erstellen von Hardlinks
  • -H oder -L: Optionen zum Kopieren symbolischer Links
  • -P: Option zum Kopieren symbolischer Links als Verzeichnisse in target_dir
  • -d: Option zum Kopieren von Verzeichnissen, ohne deren Inhalt zu kopieren
  • source_dir: Das zu kopierende Verzeichnis
  • target_dir: Das Zielverzeichnis, in das kopiert werden soll

Beispiel

Um das Verzeichnis /home/user/my_files mit Hardlinks in /home/user/new_dir zu kopieren:

cp --link /home/user/my_files /home/user/new_dir

Dadurch werden Hardlinks zu allen Dateien in /home/user/my_files in /home/user/new_dir erstellt.

Hinweise

  • Hardlinks können nur für reguläre Dateien erstellt werden. Für Verzeichnisse, Sonderdateien oder symbolische Links müssen andere Optionen verwendet werden.
  • Wenn du versuchst, einen Hardlink zu einer Datei zu erstellen, die bereits im Zielverzeichnis vorhanden ist, schlägt der Vorgang fehl.
  • Hardlinks können über Dateisystemgrenzen hinweg nicht erstellt werden.

Verzeichniskopie mit mehreren Zielverzeichnissen

Du kannst den Befehl cp auch verwenden, um ein Verzeichnis in mehrere Zielverzeichnisse zu kopieren. Dies ist nützlich, wenn du eine Kopie des Verzeichnisses an verschiedenen Orten speichern möchtest.

Um ein Verzeichnis in mehrere Zielverzeichnisse zu kopieren, verwende die folgende Syntax:

cp -R [Optionen] quelle ziel1 ziel2 ziel3 ...

Dabei ist:

  • -R ist der rekursive Schalter, der alle Unterverzeichnisse und Dateien kopiert.
  • [Optionen] sind optionale Argumente, die das Verhalten des Befehls cp steuern.
  • quelle ist das zu kopierende Verzeichnis.
  • ziel1, ziel2, ziel3 usw. sind die Zielverzeichnisse, in die das Verzeichnis kopiert werden soll.

Beispiel

Um beispielsweise das Verzeichnis /home/benutzer/Dokumente in die Verzeichnisse /tmp/dokumente und /mnt/usb-stick/dokumente zu kopieren, würdest du den folgenden Befehl verwenden:

cp -R /home/benutzer/Dokumente /tmp/dokumente /mnt/usb-stick/dokumente

Tipps

  • Du kannst Platzhalter (*) verwenden, um mehrere Verzeichnisse als Ziel anzugeben. Beispielsweise würde der folgende Befehl das Verzeichnis /home/benutzer/Dokumente in alle Verzeichnisse im aktuellen Verzeichnis kopieren, deren Namen mit Ziele beginnen:
cp -R /home/benutzer/Dokumente Ziele*
  • Wenn du den Inhalt eines Verzeichnisses in mehrere Zielverzeichnisse kopieren möchtest, ohne das Verzeichnis selbst zu kopieren, kannst du den Schalter --contents verwenden. Beispielsweise würde der folgende Befehl den Inhalt des Verzeichnisses /home/benutzer/Dokumente in die Verzeichnisse /tmp/dokumente und /mnt/usb-stick/dokumente kopieren:
cp -R --contents /home/benutzer/Dokumente /tmp/dokumente /mnt/usb-stick/dokumente

Fehlerbehebung bei der Verzeichniskopie unter Linux

Manchmal können bei der Verzeichniskopie unter Linux Fehler auftreten. Im Folgenden werden einige häufige Fehler und ihre Lösungen aufgeführt:

Berechtigungsprobleme

Wenn du beim Kopieren von Verzeichnissen Berechtigungsprobleme hast, stelle sicher, dass du über die entsprechenden Berechtigungen zum Lesen und Schreiben sowohl im Quell- als auch im Zielverzeichnis verfügst. Du kannst die Berechtigungen mit dem Befehl chmod ändern.

Beispiel:

sudo chmod -R 755 /pfad/zum/verzeichnis

Verzeichnis existiert bereits

Wenn das Zielverzeichnis bereits existiert, schlägt der Kopierbefehl fehl. Um dies zu beheben, kannst du entweder das bestehende Verzeichnis löschen oder die Option -n (nicht überschreiben) verwenden.

Beispiel:

cp -n /pfad/zum/verzeichnis /pfad/zum/zielverzeichnis

Dateisystem voll

Wenn das Dateisystem voll ist, kannst du den Befehl df verwenden, um zu überprüfen, wie viel Speicherplatz verfügbar ist. Du kannst auch Dateien löschen oder Daten auf ein anderes Laufwerk verschieben, um Speicherplatz freizugeben.

Syntaxfehler

Stelle sicher, dass du die richtige Syntax für den cp-Befehl verwendest. Insbesondere solltest du darauf achten, die Quell- und Zielverzeichnisse im richtigen Format anzugeben.

Dateiname zu lang

Wenn der Dateiname zu lang ist, kannst du den Befehl truncate verwenden, um ihn zu kürzen. Du kannst auch die Option --truncate-source beim cp-Befehl verwenden, um den Dateinamen beim Kopieren zu kürzen.

Weitere Hilfe

Wenn du weiterhin Probleme bei der Verzeichniskopie unter Linux hast, kannst du die man-Seite des cp-Befehls lesen oder im Internet nach weiteren Informationen suchen. Du kannst auch Support in Foren oder bei deiner Linux-Distribution suchen.