Cp: Unterschied zwischen den Versionen
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
|||
(34 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''cp''' ('''c'''o'''p'''y) kopiert Dateien und Verzeichnisse | {{DISPLAYTITLE:cp}} | ||
'''cp''' ('''c'''o'''p'''y) kopiert Dateien und Verzeichnisse | |||
= Beschreibung = | == Beschreibung == | ||
Der Befehl '''cp''' kopiert eine oder mehrere Dateien in das angegebene Verzeichnis | |||
* Existiert die Datei schon im Zieldirectory, wird sie überschrieben | |||
* Dateien, die mit einem Punkt beginnen, müssen explizit angegeben werden | |||
* | |||
* | |||
== | == Installation == | ||
== Optionen == | == Anwendung == | ||
{| class="wikitable" | === Datei kopieren === | ||
* Falls das Ziel ein Dateipfad ist, wird die Quelle diesen Pfad haben. Existierende Dateien werden überschrieben. | |||
* Falls das Ziel ein Verzeichnis ist, wird die Quelle darein platziert. | |||
=== Verzeichnis kopieren === | |||
* Verzeichnisse können nur mit der <code>-r</code> (rekursiv) Option kopiert werden. | |||
* Um ein Verzeichnis zu kopieren, muss das Ziel ein vorhandenes Verzeichnis sein. | |||
* Verzeichnisse werden in das Ziel kopiert. | |||
Sollen mehrere Dateien kopiert werden, muss das Ziel ein Verzeichnis sein. Das gleiches gilt für den Fall, dass ein Verzeichnis kopiert wird. | |||
=== Beispiele === | |||
Eine Quelldatei in eine Zieldatei im aktuellen Verzeichnis kopieren: | |||
cp datei.txt datei_kopie.txt | |||
Eine Quelldatei aus dem aktuellen Verzeichnis in ein Zielverzeichnis kopieren: | |||
cp datei.txt /home/user/dokumente/2020 | |||
Mehrere Quelldateien in ein Zielverzeichnis kopieren: | |||
cp datei.txt datei.odt /home/user/dokumente/2020 | |||
Ein Quellverzeichnis aus dem aktuellen Verzeichnis in ein Zielverzeichnis kopieren: | |||
cp verzeichnis1 /home/user/dokumente/2020 | |||
=== Beispiele === | |||
* Die Datei '''datei.txt''' aus dem aktuellen Verzeichnis nach '''/Dokumente''' kopieren, falls diese neuer ist als die bestehende: | |||
cp -u datei.txt /Dokumente/datei.txt | |||
* Die Dateien '''datei.txt''', '''dokument.odt''' nach '''/Dokumente''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen | |||
cp -uv datei.txt dokument.odt /Dokumente | |||
* Dateien mit bestimmtem Anfangsbuchstaben '''da*.txt''', '''do*.odt''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen | |||
cp -uv da*.txt do*.odt /Dokumente | |||
* Im letzten Beispiel werden alle Dateien aus '''/home/Otto''' samt der verstecken Einstellungsdateien rekursiv ins Verzeichnis '''Sicherungen''' kopiert, welches sich auf dem [http://wiki.ubuntuusers.de/mount eingehängten] Laufwerk '''sda9''' befindet. | |||
cp -a /home/Otto/. /media/sda9/Sicherungen | |||
=== Dateien/Ordner ausschließen === | |||
'''cp''' enthält keine --exclude-Option, jedoch biete die [http://wiki.ubuntuusers.de/Shell Shell] einen Weg, der es ermöglicht Muster auszuschließen. | |||
* Dazu muss z. B. in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended [http://en.wikipedia.org/wiki/globbing globbing]): | |||
* shopt -s extglob | |||
* Der Befehl muss jedesmal ausgeführt werden oder man trägt ihn in die [http://wiki.ubuntuusers.de/Bash/bashrc bashrc] ein. | |||
* Im Folgenden der angewandte cp-Befehl: | |||
cp -av /QUELLE/!(Datei1.txt|Festplattenabbild*|Ordner/Unterordner1) /ZIEL/ | |||
* Durch das Muster !() werden alle Dateien '''und Ordner''', die mit ''"Datei1.txt''", ''"Festplattenabbild''" und ''"Unterorder1''" beginnen, ausgeschlossen. Darüber hinaus werden alle Dateien und Ordner von QUELLE nach ZIEL kopiert. | |||
=== Fortschrittsanzeigen === | |||
Einige Distribution bieten '''cp''' mit der Option -g an. Bei größeren Kopierzeiten wird ein Statusbalken angezeigt. Um dies in zu erreichen, muss der ''progress bar''-Patch eingepflegt sein. Oder man greift auf Skripte oder [http://wiki.ubuntuusers.de/rsync rsync] zurück. | |||
==== rsync ==== | |||
* Statt cp kann rsync zum Kopieren verwendet werden. rsync --progress -ah" zu verwenden. | |||
* Das funktioniert zwar, ist aber kein vollwertiger Ersatz für "cp" mit allen seinen Aufrufparametern. | |||
rsync -auh --partial --stats –progress quelle ziel | |||
rsync -auh --partial --stats –progress quelle/ ziel/ | |||
==== Pipe Viewer ==== | |||
Auch der [http://www.ivarch.com/programs/pv.shtml Pipe Viewer] implementiert eine Fortschrittsanzeige, die sich in vielerlei Weise einsetzen lässt, aber er arbeitet nach dem Pipe-Prinzip, liest und schreibt also von den Standard-Kanälen. | |||
$ '''pv Datei > neueDatei''' | |||
==== gcp ==== | |||
* Die beste Lösung für das Problem scheint ein Programm namens "[http://wiki.goffi.org/wiki/Gcp/en gcp]" zu sein, das in Python geschrieben ist und zumindest Teil der Ubuntu- und Debian-Distributionen ist. | |||
* Es zeigt den Fortschritt beim Kopieren an, bietet die wichtigsten Aufrufparameter von "cp" und noch ein paar weitere praktische Features wie die Anpassung von Dateinamen mit Sonderzeichen, Logging und Übertragungslisten. | |||
* Seit 2003 das Patent EP0394160 ausgelaufen ist, das den Fortschrittsbalken patentiert, ist gcp patent-frei. | |||
==== Advanced Copy ==== | |||
* Besonders nahtlos fügt sich Advanced Copy (http://beatex.org/web/advancedcopy.html) in den altbekannten Unix-Werkzeugkasten ein, denn es verändert die GNU-Tools "mv" und "cp" aus den Coreutils, die zumindest auf Linux-Distributionen zum Standardumfang gehören. | |||
* Das Problem dabei ist, dass man die Coreutils selbst übersetzen muss. Schwierig ist das nicht, aber danach hat man zwei Binaries auf der Platte liegen, die nicht mehr Bestandteil der Paketverwaltung sind. | |||
== Aufruf == | |||
$ '''cp·[Optionen]·QUELLE ZIEL''' | |||
=== Optionen === | |||
{| class="wikitable options" | |||
|- | |- | ||
! Option !! Beschreibung | ! Option !! Beschreibung | ||
Zeile 46: | Zeile 120: | ||
'''Zusatz Info:''' Im Gegensatz zum COPY-Befehl von DOS muß diesem Befehl immer ein Ziel angegeben werden. Sollen mehrere Dateien kopiert werden, so muß das Ziel ein Verzeichnis sein. | '''Zusatz Info:''' Im Gegensatz zum COPY-Befehl von DOS muß diesem Befehl immer ein Ziel angegeben werden. Sollen mehrere Dateien kopiert werden, so muß das Ziel ein Verzeichnis sein. | ||
{| class="wikitable sortable" | {| class="wikitable sortable options" | ||
|- | |- | ||
| | '''-a--archive ''' | | | '''-a--archive ''' | ||
Zeile 73: | Zeile 147: | ||
|- | |- | ||
| >'''-p ''' | | >'''-p ''' | ||
| | (''preserve'') erhält die Zugriffsrechte und Eigentümer des Originals (nicht die SUID und SGID | | | (''preserve'') erhält die Zugriffsrechte und Eigentümer des Originals (nicht die SUID und SGID Bit) | ||
|- | |- | ||
| >--no-dereference ''' | | >--no-dereference ''' | ||
Zeile 110: | Zeile 184: | ||
* Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind: | * Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind: | ||
{| class="wikitable sortable" | {| class="wikitable sortable options" | ||
|- | |- | ||
| | '''none, off''' | | | '''none, off''' | ||
Zeile 126: | Zeile 200: | ||
|} | |} | ||
= Konfiguration = | === Parameter === | ||
== Dateien == | === Umgebung === | ||
=== Rückgabewert === | |||
== Konfiguration == | |||
=== Dateien === | |||
== Sicherheit == | |||
== Dokumentation == | |||
=== RFC === | |||
=== Man-Page === | |||
=== Info-Pages === | |||
= | == Siehe auch == | ||
# [[dd]] | |||
== Links == | |||
=== Projekt === | |||
= | === Weblinks === | ||
== | |||
= | |||
== | |||
# https://wiki.ubuntuusers.de/cp/ | # https://wiki.ubuntuusers.de/cp/ | ||
[[ | [[Kategorie:Linux/Befehl]] | ||
[[ | [[Kategorie:Linux/Datei/Verwaltung]] | ||
[[ | [[Kategorie:Coreutils]] | ||
{{DEFAULTSORT:cp}} |
Aktuelle Version vom 12. November 2024, 18:41 Uhr
cp (copy) kopiert Dateien und Verzeichnisse
Beschreibung
Der Befehl cp kopiert eine oder mehrere Dateien in das angegebene Verzeichnis
- Existiert die Datei schon im Zieldirectory, wird sie überschrieben
- Dateien, die mit einem Punkt beginnen, müssen explizit angegeben werden
Installation
Anwendung
Datei kopieren
- Falls das Ziel ein Dateipfad ist, wird die Quelle diesen Pfad haben. Existierende Dateien werden überschrieben.
- Falls das Ziel ein Verzeichnis ist, wird die Quelle darein platziert.
Verzeichnis kopieren
- Verzeichnisse können nur mit der
-r
(rekursiv) Option kopiert werden. - Um ein Verzeichnis zu kopieren, muss das Ziel ein vorhandenes Verzeichnis sein.
- Verzeichnisse werden in das Ziel kopiert.
Sollen mehrere Dateien kopiert werden, muss das Ziel ein Verzeichnis sein. Das gleiches gilt für den Fall, dass ein Verzeichnis kopiert wird.
Beispiele
Eine Quelldatei in eine Zieldatei im aktuellen Verzeichnis kopieren:
cp datei.txt datei_kopie.txt
Eine Quelldatei aus dem aktuellen Verzeichnis in ein Zielverzeichnis kopieren:
cp datei.txt /home/user/dokumente/2020
Mehrere Quelldateien in ein Zielverzeichnis kopieren:
cp datei.txt datei.odt /home/user/dokumente/2020
Ein Quellverzeichnis aus dem aktuellen Verzeichnis in ein Zielverzeichnis kopieren:
cp verzeichnis1 /home/user/dokumente/2020
Beispiele
- Die Datei datei.txt aus dem aktuellen Verzeichnis nach /Dokumente kopieren, falls diese neuer ist als die bestehende:
cp -u datei.txt /Dokumente/datei.txt
- Die Dateien datei.txt, dokument.odt nach /Dokumente kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen
cp -uv datei.txt dokument.odt /Dokumente
- Dateien mit bestimmtem Anfangsbuchstaben da*.txt, do*.odt kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen
cp -uv da*.txt do*.odt /Dokumente
- Im letzten Beispiel werden alle Dateien aus /home/Otto samt der verstecken Einstellungsdateien rekursiv ins Verzeichnis Sicherungen kopiert, welches sich auf dem eingehängten Laufwerk sda9 befindet.
cp -a /home/Otto/. /media/sda9/Sicherungen
Dateien/Ordner ausschließen
cp enthält keine --exclude-Option, jedoch biete die Shell einen Weg, der es ermöglicht Muster auszuschließen.
- Dazu muss z. B. in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended globbing):
- shopt -s extglob
- Der Befehl muss jedesmal ausgeführt werden oder man trägt ihn in die bashrc ein.
- Im Folgenden der angewandte cp-Befehl:
cp -av /QUELLE/!(Datei1.txt|Festplattenabbild*|Ordner/Unterordner1) /ZIEL/
- Durch das Muster !() werden alle Dateien und Ordner, die mit "Datei1.txt", "Festplattenabbild" und "Unterorder1" beginnen, ausgeschlossen. Darüber hinaus werden alle Dateien und Ordner von QUELLE nach ZIEL kopiert.
Fortschrittsanzeigen
Einige Distribution bieten cp mit der Option -g an. Bei größeren Kopierzeiten wird ein Statusbalken angezeigt. Um dies in zu erreichen, muss der progress bar-Patch eingepflegt sein. Oder man greift auf Skripte oder rsync zurück.
rsync
- Statt cp kann rsync zum Kopieren verwendet werden. rsync --progress -ah" zu verwenden.
- Das funktioniert zwar, ist aber kein vollwertiger Ersatz für "cp" mit allen seinen Aufrufparametern.
rsync -auh --partial --stats –progress quelle ziel rsync -auh --partial --stats –progress quelle/ ziel/
Pipe Viewer
Auch der Pipe Viewer implementiert eine Fortschrittsanzeige, die sich in vielerlei Weise einsetzen lässt, aber er arbeitet nach dem Pipe-Prinzip, liest und schreibt also von den Standard-Kanälen.
$ pv Datei > neueDatei
gcp
- Die beste Lösung für das Problem scheint ein Programm namens "gcp" zu sein, das in Python geschrieben ist und zumindest Teil der Ubuntu- und Debian-Distributionen ist.
- Es zeigt den Fortschritt beim Kopieren an, bietet die wichtigsten Aufrufparameter von "cp" und noch ein paar weitere praktische Features wie die Anpassung von Dateinamen mit Sonderzeichen, Logging und Übertragungslisten.
- Seit 2003 das Patent EP0394160 ausgelaufen ist, das den Fortschrittsbalken patentiert, ist gcp patent-frei.
Advanced Copy
- Besonders nahtlos fügt sich Advanced Copy (http://beatex.org/web/advancedcopy.html) in den altbekannten Unix-Werkzeugkasten ein, denn es verändert die GNU-Tools "mv" und "cp" aus den Coreutils, die zumindest auf Linux-Distributionen zum Standardumfang gehören.
- Das Problem dabei ist, dass man die Coreutils selbst übersetzen muss. Schwierig ist das nicht, aber danach hat man zwei Binaries auf der Platte liegen, die nicht mehr Bestandteil der Paketverwaltung sind.
Aufruf
$ cp·[Optionen]·QUELLE ZIEL
Optionen
Option | Beschreibung |
---|---|
-a oder --archive | Steht für „archive“. Mit diesem Schalter werden Zeitstempel, Besitzer, Gruppen, Dateirechte wie von der Quelle beibehalten. |
-b oder --backup | Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind. |
-d | erhält symbolische Links, folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links) |
-f (force) | Erzwinge Kopieren und entferne Zieldatei, falls nötig. |
-i oder --interactive | fragt vor Überschreiben nach. |
-H | symbolischen Verknüpfungen, die auf Kommandozeile als QUELLE angegeben folgen (Standardeinstellung) |
-l oder --link | kopiert nicht, sondern erstellt harten Link. |
-n oder --no-clobber | niemals vorhandene Dateien überschreiben (-i wird wirkungslos) |
-p (klein) | erhält Standard-Dateiattribute wie Zeitpunkt des letzten Schreibzugriffs. |
-P (groß) | Symbolische Links als symbolische Links kopieren, statt den Links in der Quelle zu folgen. |
-r oder -R oder --recursive | Steht für „rekursiv“. Mit diesem Schalter werden alle Ordner und Unterordner inkl. Dateien kopiert. Also ganze Verzeichnisbäume. |
-s oder --symbolic-link | kopiert nicht, sondern erstellt symbolischen Link. |
-u oder --update | kopiert nur, wenn Zieldatei älter als Quelldatei. |
-v oder --verbose | Steht für “verbose” und Zeigt alle Tätigkeiten an was der Befehl cp gerade durchführt. |
-x (one file-system) | Ignoriert Unterverzeichnisse, die in anderen Partitionen angesiedelt sind. |
Zusatz Info: Im Gegensatz zum COPY-Befehl von DOS muß diesem Befehl immer ein Ziel angegeben werden. Sollen mehrere Dateien kopiert werden, so muß das Ziel ein Verzeichnis sein.
-a--archive | Beibehaltung von Besitzer-, Gruppen- und Zugriffsrechten und Erstellungs-, Modifikations- und Zugriffsdaten (entspricht -dR --preserve=all) |
-b--backup | Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind |
-d | (no-dereference) erhält symbolische Links, folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links) |
-f | (force) Dateien im Zielverzeichnis werden überschrieben |
-i --interactive | (interactive) erwartet Bestätigung vor dem Überschreiben bereits existierender Dateien |
-l --link | (link) erstellt harte macht Links anstelle von Kopien (nur bei normalen Dateien) |
-n--no-clobber | niemals vorhandene Dateien überschreiben (-i wird wirkungslos) |
>-P | (path) die Quelldateien werden mit Pfad relativ zum Zielverzeichnis kopiert |
>-p | (preserve) erhält die Zugriffsrechte und Eigentümer des Originals (nicht die SUID und SGID Bit) |
>--no-dereference | niemals symbolischen Links in der Quelle folgen |
>--preserve=mode,ownership,timestamps | erhält Standard-Dateiattribute, wie Zeitpunkt des letzten Schreibzugriffs |
-r -R
--recursive |
(recursive) kopiert rekursiv alle Dateien der Unterverzeichnisse (auch Devices und Links) wie normale Dateien |
-s | |
-S Endung | (suffix) sichert die Dateien vor dem Überschreiben durch Umbenennung mit der Endung; Voreinstellung ist `~' |
-s --symbolic-link | (symbolic link) erstellt symbolische Links anstelle von Kopien (absolute Pfadnamen) |
-u --update | (update) kopiert (überschreibt) nur, wenn Zieldatei älter als Quelldatei |
-v --verbose | zeigt den Kopierfortschritt an |
-x | (one file-system) ignoriert Unterverzeichnisse, die in anderen Dateisystemen angesiedelt sind |
- cp kennt noch eine Reihe von weiteren Optionen, die man mit Hilfe der Option --help aufrufen kann. Oder man schaut in die Manpages von cp.
- Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde.
- Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind:
none, off | Niemals Sicherung erzeugen (selbst wenn --backup angegeben wurde) |
numbered, t | Erzeugen von nummerierten Sicherheitskopien |
existing, nil | Nummeriert wenn nummerierte Backups existieren, sonst einfach. |
Simple, never | Immer einfache Sicherheitskopien erzeugen |