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 intarget_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 Befehlscp
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 mitZiele
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.