Das cp Tool in Linux wird zum Kopieren von Dateien und Verzeichnissen verwendet. Es gehört zu den grundlegenden Tools, die in nahezu jeder Linux-Distribution verfügbar sind. Die Funktionalität von cp ist umfangreich und bietet eine Vielzahl von Optionen, um das Kopieren flexibel und effizient zu gestalten.

Syntax

Bash
cp [OPTION] [-T] QUELLE ZIEL
cp [OPTION] QUELLE VERZEICHNIS
cp [OPTION] -t VERZEICHNIS QUELLE
Parameter
-a, --archive

Kopiert Dateien und Verzeichnisse rekursiv und bewahrt dabei alle Attribute (entspricht -dpR --preserve=all)

--attributes-only

Kopiert nur die Datei-Attribute, nicht den Datei-Inhalt

--backup[=CONTROL]

Erstellt eine Sicherung vorhandener Ziel-Dateien. -b funktioniert ähnlich, akzeptiert jedoch kein Argument.

--copy-contents

Kopiert den Inhalt von Spezial-Dateien, wenn rekursiv kopiert wird.

-d

Verhält sich wie --no-dereference --preserve=links, d.h. symbolische Links werden dereferenziert, sonder als Links kopiert.

--debug

Zeigt detailliert an, wie die Dateien kopiert werden, und impliziert -v (verbose).

-f, --force

Erzwingt das Kopiere, indem vorhandene Ziel-Dateien gelöscht werden, falls sie nicht geöffnet werden können (ignoriert bei -n).

-i, --interactive

Fragt nach, bevor vorhandene Dateien überschrieben werden (überstimmt -n).

-H

Folgt symbolischen Links, die als Quelle auf der Kommandozeile angegeben sind.

-l, --link

Erstellt Hardlinks anstelle von Kopien.

-L, --dereference

Folgt immer symbolischen Links in der Quelle.

-n, --no-clobber

Überschreibt keine vorhandenen Dateien und schlägt nicht fehl (überstimmt -u oder -i).

-P, --no-dereference

Folgt niemals symbolischen Links in der Quelle.

-p

Bewahrt Datei-Attribute wie Modus, Eigentümer und Zeitstempel (gleichbedeutend mit --preserve=mode, ownership, timestamps).

--preserve[=ATTR_LIST]

Bewahrt die angegebenen Datei-Attribute.

--no-preserve=ATTR_LIST

Bewahrt die angegebenen Attribute nicht.

--parents

Behält den gesamten Quellpfad bei und hängt ihn an das Zielverzeichnis an.

-R, -r, --recursive

Kopiert Verzeichnisse rekursiv.

--reflink[=WHEN]

Steuert das Erstellen von Copy-on-Write (CoW) Kopien.

--remove-destination

Löscht vorhandene Ziel-Dateien vor dem Kopieren, anders als --force.

--sparse=WHEN

Steuer das Erstellen von „sparse“ Dateien (Dateien mit Löchern).

--strip-trailing-slashes

Entfernt abschließende Schrägstriche aus den Quell-Argumenten.

-s, --symbolic-link

Erstelle symbolische Links anstatt Dateien zu kopieren.

-S, --suffix=SUFFIX

Ändert die Standard-Dateiendung von Sicherungsdateien.

-t, --target-directory=DIRECTORY

Kopiert alle Quell-Argumente in das angegebene Zielverzeichnis.

-T, --no-target-directory

Behandelt das Ziel als normale Datei, nicht als Verzeichnis.

--update[=UDPATE]

Aktualisiert nur vorhandene Dateien. UPDATE kann all, none oder older sein.

-u

Gleichbedeutend mit --update=older.

-v, --verbose

Zeigt an, was der Befehl gerade tut.

-x, --one-file-system

Bleibt innerhalb des aktuellen Dateisystems.

-Z

Setzt den SELinux-Sicherheitskontext der Zieldatei auf den Standardtyp.

--context[=CTX]

Wie -Z, aber erlaubt es, den Sicherheitskontext auf CTX zu setzen.

--help

Zeigt die Hilfe an und beendet das Programm.

--version

Zeigt Versionsinformationen und beendet das Programm.

Verwendung

Einfaches Kopieren einer Datei

Wenn man eine Datei von einem Ort an einen anderen kopieren möchte, kann man dies wie folgt tun.

Bash Beispiel
cp ./datei.txt /home/users/documents/

Die Datei datei.txt wird in das Verzeichnis /home/user/documents/ kopiert. Wenn die Datei bereits existiert, wird sie überschrieben.

Kopieren mehrerer Dateien

Mehrere Dateien können in ein Verzeichnis kopiert werden, indem man die Dateinamen hintereinander angibt.

Bash Beispiel
cp datei1.txt datei2.txt /home/user/backup 

Die Dateien datei1.txt und datei2.txt werden in das Verzeichnis /home/user/backup/ kopiert.

Rekursives Kopieren

Um ein gesamtes Verzeichnis samt Inhalt zu kopieren, muss die Option -r (rekursiv) verwendet werden.

Bash Beispiel
cp -r /home/user/documents/ /home/user/backup/

Das gesamte Verzeichnis documents inklusive aller Unterverzeichnisse und Dateien wird in das Verzeichnis /home/user/backup/ kopiert.

Datei-Attribute beibehalten

Wenn man möchte, dass die Datei-Attribute (wie Zugriffsrechte, Eigentümer und Zeitstempel) beim Kopieren erhalten bleiben, kann man die Option -p verwenden.

Bash Beispiel
cp -p bericht.txt /home/user/documents/

Die Datei bericht.txt wird in das Verzeichnis /home/user/documents/ kopiert und ihre ursprünglichen Zugriffsrechte, der Eigentümer und die Zeitstempel bleiben erhalten.

Interaktives Kopieren

Um sicherzustellen, dass man gefragt wird, bevor eine existierende Datei überschrieben wird, kann man die Option -i (interaktiv) verwenden.

Bash Beispiel
cp -i bericht.txt /home/user/backup/
Output
cp: overwrite '/home/user/backup/bericht.txt'? (yes/no) 

Falls bericht.txt bereits im Verzeichnis /home/user/backup/ existiert, wird eine Aufforderung angezeigt, bevor die Datei überschrieben wird.

Kopieren nur neuer oder geänderter Dateien

Um nur Dateien zu kopieren, die entweder neu sind oder neuer als die im Zielverzeichnis befindlichen, kann die Option -u verwendet werden.

Bash Beispiel
cp -u bericht.txt /home/user/backup/

Die Datei bericht.txt wird nur dann in das Zielverzeichnis kopiert, wenn sie entweder dort nicht existiert oder die Datei im Quellverzeichnis neuer ist als die im Zielverzeichnis.

Wenn man symbolische Links kopieren möchte, ohne die Dateien auf die sie zeigen zu kopieren, kann man die Option -P verwenden.

Bash Beispiel
cp -P verknuepfung /home/user/backup/

Der symbolische Link verknuepfung wird in das Verzeichnis /home/user/backup/ kopiert, ohne dass die Datei, auf die der Link zeigt, kopiert wird.

Häufige Stolperfallen

cp überschreibt Zieldateien ohne Warnung.

Anders als grafische Dateimanager fragt cp standardmäßig nicht, bevor es eine bestehende Datei überschreibt. cp quelle.txt ziel.txt löscht den alten Inhalt von ziel.txt stillschweigend. Mit der Option -i (interactive) aktivierst du eine Rückfrage, mit -n (no-clobber) verhinderst du das Überschreiben komplett. Viele Distributionen setzen alias cp=‘cp -i’ als Schutz — in Skripten greift der Alias jedoch nicht.

Ohne -r werden Verzeichnisse nicht kopiert.

cp quellverzeichnis ziel/ schlägt mit der Meldung cp: -r not specified; omitting directory fehl. cp kopiert standardmäßig nur einzelne Dateien — für Verzeichnisse ist -r (rekursiv) zwingend erforderlich. Der sicherste Weg für komplette Verzeichniskopien ist cp -a (archive), das rekursiv kopiert und alle Dateiattribute, Symlinks und Berechtigungen erhält.

cp -r und Symlinks — was wird kopiert?

Beim rekursiven Kopieren mit cp -r werden Symlinks standardmäßig als Kopie der Zieldatei aufgelöst — der Link geht verloren. Erst mit -P (no-dereference) oder -a bleiben symbolische Links als Links erhalten. Das ist besonders kritisch bei Backups von Systemverzeichnissen: Wenn Symlinks zu Dateien werden, verdoppelt sich der Speicherverbrauch und das Backup kann fehlerhaft sein.

cp aktualisiert den Zeitstempel der Kopie.

Die neu erstellte Kopie bekommt standardmäßig den aktuellen Zeitstempel — nicht den der Quelldatei. Für Backups, bei denen das Originaldatum erhalten bleiben soll, verwendest du -p (preserve) oder -a. Diese Optionen erhalten Modus, Eigentümer und Zeitstempel. Beachte: Der Eigentümer kann nur von root bewahrt werden.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht