Kopieren unter Linux: Mit CP ganz einfach

Wer unter einem der zahlreichen Open-Source-Distributionen, die auf Linux basieren, mit der Kommandozeile arbeiten will, muss verschiedene Linux-Befehle kennen. Diese ermöglichen es, durch Ordnerstrukturen zu navigieren, Daten zu bearbeiten oder – wie in diesem Fall – Dateien und Verzeichnisse zu kopieren. Mit dem CP-Befehl (kurz für „copy“) können Sie Kopien von ausgewählten Dateien oder ganzen Ordnern erstellen.

Mehr als nur eine Domain!

Hier finden Sie Ihre perfekte Domain - z.B. .de Domain + persönlicher Berater

E-Mail-Postfach
24/7 Support
Wildcard SSL

Wofür braucht man unter Linux CP?

Das Kopieren von Dateien und Ordnern gehört zu den Grundlagen eines jeden Betriebssystems und wird von den meisten Nutzern täglich ausgeführt. Kopien werden eingesetzt, um sie mit anderen Personen zu teilen oder zur Sicherung zu verwahren. In der Regel ist dieses Werkzeug fester (und bereits installierter) Bestandteil jeder Linux-Installation – egal, welche Distribution man verwendet. CP gehört zu den GNU Core Utilities (kurz: „coreutils“). Dieses Paket mit den wichtigsten Werkzeugen steht zur freien Verwendung bereit.

Syntax von Linux-CP

Die grundlegende Funktion von CP ist einfach: Eine oder mehrere Dateien an einem vom Nutzer festgelegten Ort kopieren. Dafür sind vor allem zwei Informationen wichtig: Name des Objekts und das Ziel des Vorgangs. Dementsprechend ist auch die Syntax von CP aufgebaut:

cp [Original] [Ziel]

Dafür navigiert man in das Verzeichnis der zu kopierenden Datei und gibt dann im Befehl den Dateinamen und den Pfad an, unter dem die neue Datei gespeichert werden soll.

cp text.txt /home/benutzer/zielordner/

In diesem Beispiel erstellen wir eine neue Datei im Zielordner, die den gleichen Namen wie die Ausgangsdatei hat. Wer mehrere Dateien gleichzeitig kopieren möchte, führt diese innerhalb der gleichen Befehlszeile hintereinander auf.

cp text1.txt text2.txt text3.txt /home/benutzer/zielordner/

In den bisherigen Beispielen haben wir der Kopie immer den gleichen Namen wie der Ausgangsdatei gegeben. Sie können den Dateinamen frei bestimmen, indem Sie diesen mit in den Zielparameter eintragen:

cp text.txt /home/benutzer/zielordner/text_kopie.txt

Lässt man den Pfad des Zielordners weg, wird die Kopie mit neuem Dateinamen im gleichen Ordner wie die Originaldatei erzeugt.

cp text1.txt text2.txt

Besondere Funktionen von CP

Der Linux-CP-Befehl kann noch weitere Aufgaben erledigen. Dafür verwendet man das Optionenfeld:

cp [Option(en)] [Original(e)] [Ziel]

Folgende Parameter (flags) können Sie in das Feld eintragen, um so die Kopierarbeit umfangreicher oder einfacher zu gestalten.

Parameter

Beschreibung

Beispiel

-a

Kopiert die Datei mit der gleichen Rechteeinstellung und den gleichen Metadaten wie beim Original.

cp -a text.txt /home/benutzer/zielordner/

--archive

Kopiert die Datei mit der gleichen Rechteeinstellung und den gleichen Metadaten wie beim Original.

cp --archive text.txt /home/benutzer/zielordner/

-b

Erzeugt eine Kopie im Zwischenspeicher, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.

cp -b text.txt /home/benutzer/zielordner/

--backup

Erzeugt eine Kopie im Zwischenspeicher, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.

cp --backup text.txt /home/benutzer/zielordner/

--backup=numbered

Erstellt eine neue nummerierte Datei, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben.

cp --backup==numbered text.txt /home/benutzer/zielordner/

--backup=existing

Erstellt eine neue nummerierte Datei, wenn Original und Ziel den gleichen Dateinamen, aber unterschiedlichen Inhalt haben – und es bereits nummerierte Backups gibt.

cp --backup==existing text.txt /home/benutzer/zielordner/

-d

Kopiert symbolische Links.

cp -d text.txt /home/benutzer/zielordner/

-f

Erzwingt das Überschreiben beim Kopieren.

cp -f text.txt /home/benutzer/zielordner/text.txt

--force

Erzwingt das Überschreiben beim Kopieren.

cp --force text.txt /home/benutzer/zielordner/text.txt

-i

Fragt vor dem Überschreiben von gleichnamigen Dateien um Erlaubnis.

cp -i text.txt /home/benutzer/zielordner/

--interactive

Fragt vor dem Überschreiben von gleichnamigen Dateien um Erlaubnis.

cp --interactive text.txt /home/benutzer/zielordner/

-l

Erstellt statt einer Kopie einen Hardlink.

cp -l text.txt /home/benutzer/zielordner/

--link

Erstellt statt einer Kopie einen Hardlink.

cp --link text.txt /home/benutzer/zielordner/

-n

Vorhandene Dateien werden niemals überschrieben.

cp -n text.txt /home/benutzer/zielordner/

--no-cobbler

Vorhandene Dateien werden niemals überschrieben.

cp –no-cobbler text.txt /home/benutzer/zielordner/

-p

Attribute der Originaldatei werden beim Kopieren vererbt.

cp -p text.txt text1.txt

--preserve

Attribute der Originaldatei werden beim Kopieren vererbt.

cp --preserve text.txt text1.txt

--preserve=mode

Der Modus der Originaldatei wird beim Kopieren vererbt.

cp --preserve==mode text.txt text1.txt

--preserve=ownership

Die Besitzrechte der Originaldatei werden beim Kopieren vererbt.

cp --preserve==ownership text.txt text1.txt

--preserve=timestamp

Der Zeitstempel der Originaldatei wird beim Kopieren vererbt.

cp --preserve==timestamp text.txt text1.txt

--preserve=links

Verlinkungen der Originaldatei werden beim Kopieren vererbt.

cp --preserve==links text.txt text1.txt

--preserve=context

Der Sicherheitskontext der Originaldatei wird beim Kopieren vererbt.

cp --preserve==context text.txt text1.txt

--preserve=xattr

Erweiterte Attribute der Originaldatei werden beim Kopieren vererbt.

cp --preserve==xattr text.txt text1.txt

--preserve=alle

Alle Attribute der Originaldatei werden beim Kopieren vererbt.

cp --preserve==all text.txt text1.txt

-P

Symbolische Links werden als solche gespeichert.

cp -P text.txt /home/benutzer/zielordner/

--no-dereference

Symbolische Links werden als solche gespeichert.

cp --no-dereference text.txt /home/benutzer/zielordner/

-r

Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.

cp -r /home/benutzer/originalordner/ /home/benutzer/zielordner/

-R

Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.

cp -R /home/benutzer/originalordner/ /home/benutzer/zielordner/

--recursive

Verzeichnisse werden inklusive Unterverzeichnisse rekursiv kopiert.

cp --recursive /home/benutzer/originalordner/ /home/benutzer/zielordner/

-s

Erstellt einen symbolischen Link auf die Originaldatei.

cp -s text.txt /home/benutzer/zielordner/

--symbolic-link

Erstellt einen symbolischen Link auf die Originaldatei.

cp --symbolic-link text.txt /home/benutzer/zielordner/

-S

Überschreibt beim Kopieren mit --backup ein Backup-Suffix.

cp --backup=simple -S text.txt /home/benutzer/zielordner/

--suffix=eigenes_suffix

Überschreibt beim Kopieren mit --backup ein Backup-Suffix mit einem eigenen Begriff.

cp --backup=simple –suffix=eigenes_suffix text.txt /home/benutzer/zielordner/

-u

Kopiert die Datei nur, wenn die Zieldatei älter als das Original ist.

cp -u text.txt /home/benutzer/zielordner/text.txt

--update

Kopiert die Datei nur, wenn die Zieldatei älter als das Original ist.

cp --update text.txt /home/benutzer/zielordner/text.txt

-v

Gibt nach dem Kopiervorgang eine Meldung aus.

cp -v text.txt text1.txt

--verbose

Gibt nach dem Kopiervorgang eine Meldung aus.

cp --verbose text.txt text1.txt

Tipp

Viele Optionen können Sie auch miteinander kombinieren. Dafür schreiben Sie die Parameter mit einem Leerzeichen getrennt in den Anfangsbereich des Befehls.

Beispiele für den Einsatz von CP

An der Vielzahl der Optionen für den Copy-Befehl kann man erkennen, dass sich CP unter Linux nicht nur für das einfache Kopieren von Dateien und Ordnern einsetzen lässt. Indem Sie die verschiedenen Parameter miteinander kombinieren, können Sie umfangreiche Aufgaben bewältigen. Die folgenden drei Beispiele folgen typischen Anwendungsszenarien im Alltag eines Linux-Users.

Nummeriertes Backup

Gehen wir davon aus, dass Sie an einer Datei arbeiten und von dieser mehr oder weniger regelmäßig ein Backup erzeugen möchten. Damit Sie Änderungen auch nachvollziehen und unter Umständen zu einem älteren Stand zurückkehren können, werden einzelne Dateien angelegt. Dafür verwenden wir die erweiterte Backup-Option.

cp -f -v --backup=numbered text.txt text.txt

Wir erstellen dieses Backup unter dem gleichen Dateinamen und auch im gleichen Ordner. Damit dies möglich ist, nutzen wir die ‚force‘-Option. Da wir zusätzlich die ‚numbered‘-Option aktiviert haben, entstehen dennoch jeweils neue Dateien mit durchnummerierten Dateinamen. Dank ‚verbose‘ erhalten Sie nach jedem Kopiervorgang eine Benachrichtigung.

Das sieht in der Konsole dann so aus:

~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~1~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~2~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~3~'
~$ ls
text.txt  text.txt.~1~  text.txt.~2~  text.txt.~3~
Tipp

In Linux können Sie mit dem ls-Befehl eine Liste der im Ordner bestehenden Dateien und Unterordner anzeigen lassen.

Mit Wildcards Dateien sortieren

Sie haben einen Ordner voll mit verschiedensten Dateien: Bilder, Dokumente und Anwendungen sind durcheinander abgelegt. Nehmen wir nun an, dass Sie alle Bilder in einen Ordner kopieren möchten. Statt nun alle Bilder einzeln in den Befehl einzutragen, arbeiten wir mit dem Asterisk (*), der als Wildcard dient. In unserem Beispiel ersetzen wir den kompletten Dateinamen durch ein Sternchen und geben nur die Dateiendungen an.

cp *.jpg *.png /home/benutzer/Bilder

Durch diesen Befehl kopieren Sie alle Dateien mit den Endungen JPG und PNG in den Bilderordner. Alle anderen Dateiformate werden ignoriert. Die Originaldateien bleiben übrigens bestehen, da Sie mit CP Daten nur kopieren und nicht verschieben.

Kopieren von Verzeichnissen

Das rekursive Kopieren umfasst einen Ordner mitsamt seinen Unterordnern. Die Verzeichnisstruktur wird also mitgenommen. Beim einfachen Kopieren mit CP funktioniert das nicht: Versucht man einen Ordner ohne entsprechende Option zu kopieren, erhält man nur eine Fehlermeldung. Stattdessen setzt man den Parameter ‚-r‘ bzw. ‚--recursive‘ oder ‚-R‘.

In unserem Beispiel wollen wir regelmäßig eine Sicherungskopie eines Ordners samt Inhalt und Unterordner anlegen. Damit nicht immer alles kopiert werden muss, setzen wir zusätzlich die ‚update‘-Funktion ein.

cp -r -u /home/benutzer/Original/ /home/benutzer/Backups/

Wenn Sie den Befehl zum ersten Mal ausführen, wird innerhalb des Backup-Ordners das Verzeichnis ‚Original‘ erstellt. Alle Dateien und Unterverzeichnisse werden dort hineinkopiert. Bei großen Datenmengen kann dies einige Zeit dauern. Durch die Option ‚-u‘ kopieren Sie anschließend immer nur geänderte Daten.

Alternativen zu Linux-CP

Trotz der zahlreichen Optionen von CP ist der Befehl nur relativ eingeschränkt nutzbar. Möchte man beispielsweise eine Kopie erstellen und das Original anschließend löschen, muss man zu MV (move) greifen. Auch bei diesem Befehl geben Sie das Ausgangsobjekt und den Zielpfad ein.

Etwas ausgereifter als CP ist der DD-Befehl. Bei diesem haben Sie zusätzlich die Möglichkeit, während des Kopiervorgangs das Format der Daten zu ändern. Dafür geht der Prozess Bit für Bit vor. Das Kommando eignet sich beispielsweise, wenn man komplette Festplatten oder Partitionen kopieren möchte.

Ebenfalls interessant ist der Linux-Befehl PYCP. Bei diesem erhalten Sie eine grafische Fortschrittsanzeige während des Kopiervorgangs. Sie benötigen allerdings Python 3.5 (oder neuer) dafür. In neueren Ubuntu-Versionen ist die Programmiersprache standardmäßig vorinstalliert.

Auch der Linux-SCP-Befehl kann hilfreich sein. Mit Secure Copy transferieren Sie Daten vom lokalen Computer auf einen anderen oder umgekehrt. Dies geschieht per SSH und ist daher ein verschlüsselter Vorgang.

Fazit

Mit Linux-CP können Sie schnell und relativ einfach Dateien und Ordner kopieren. Durch viele Optionen lassen sich auch komplexere Aufgaben erledigen. Um regelmäßige Arbeiten durchzuführen, können Sie den Befehl auch gut in Shell-Skripten unterbringen. Auf diese Weise schreiben Sie sich beispielsweise ein Skript für ein wöchentliches Backup.

Für den täglichen Gebrauch des Linux-Terminals sollten Sie noch weitere Befehle kennen. Informieren Sie sich beispielweise über diese Kommandos, um den Workflow zu vereinfachen: