Zum Inhalt springen

Cp: Unterschied zwischen den Versionen

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  T2600G/System/UserManagement » Ethernet/Frame » IPv6 » Ethernet/Jumbo Frame » cp
K Textersetzung - „=== Einzelnachweise ===↵<references />“ durch „“
K Textersetzung - „–“ durch „-“
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 43: Zeile 43:
  cp -uv da*.txt do*.odt /Dokumente
  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.
* Im letzten Beispiel werden alle Dateien aus '''/home/Otto''' samt der verstecken Einstellungsdateien rekursiv ins Verzeichnis '''Sicherungen''' kopiert, welches sich auf dem [https://wiki.ubuntuusers.de/mount eingehängten] Laufwerk '''sda9''' befindet.
  cp -a /home/Otto/. /media/sda9/Sicherungen
  cp -a /home/Otto/. /media/sda9/Sicherungen


=== Dateien/Ordner ausschließen ===
=== 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.
'''cp''' enthält keine --exclude-Option, jedoch biete die [https://wiki.ubuntuusers.de/Shell Shell] einen Weg, der es ermöglicht Muster auszuschließen.
* Dazu muss z.&nbsp;B.&nbsp;in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended [http://en.wikipedia.org/wiki/globbing globbing]):
* Dazu muss beispielsweise in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended [https://en.wikipedia.org/wiki/globbing globbing]):
* shopt -s extglob
* 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.
* Der Befehl muss jedesmal ausgeführt werden oder man trägt ihn in die [https://wiki.ubuntuusers.de/Bash/bashrc bashrc] ein.
* Im Folgenden der angewandte cp-Befehl:
* Im Folgenden der angewandte cp-Befehl:


Zeile 58: Zeile 58:


=== Fortschrittsanzeigen ===
=== 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.
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 [https://wiki.ubuntuusers.de/rsync rsync] zurück.


==== rsync ====
==== rsync ====
Zeile 64: Zeile 64:
* Das funktioniert zwar, ist aber kein vollwertiger Ersatz für "cp" mit allen seinen Aufrufparametern.
* 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
  rsync -auh --partial --stats –progress quelle/ ziel/
  rsync -auh --partial --stats -progress quelle/ ziel/


==== Pipe Viewer ====
==== 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.
Auch der [https://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'''
  $ '''pv Datei > neueDatei'''


==== gcp ====
==== 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.
* Die beste Lösung für das Problem scheint ein Programm namens "[https://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.
* 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.
* Seit 2003 das Patent EP0394160 ausgelaufen ist, das den Fortschrittsbalken patentiert, ist gcp patent-frei.


==== Advanced Copy ====
==== 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.
* Besonders nahtlos fügt sich Advanced Copy (https://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.
* 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.


== Syntax ==
== Aufruf ==
  $ '''cp·[Optionen]·QUELLE ZIEL'''
  $ '''cp·[Optionen]·QUELLE ZIEL'''


Zeile 88: Zeile 88:
! Option !! Beschreibung
! Option !! Beschreibung
|-
|-
| -a oder --archive||Steht für „archive“. Mit diesem Schalter werden Zeitstempel, Besitzer, Gruppen, Dateirechte wie von der Quelle beibehalten.
| -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.
| -b oder --backup||Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind.
Zeile 108: Zeile 108:
| -P (groß)||Symbolische Links als symbolische Links kopieren, statt den Links in der Quelle zu folgen.
| -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.
| -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.
| -s oder --symbolic-link||kopiert nicht, sondern erstellt symbolischen Link.
Zeile 114: Zeile 114:
| -u oder --update||kopiert nur, wenn Zieldatei älter als Quelldatei.
| -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.
| -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.
| -x (one file-system)||Ignoriert Unterverzeichnisse, die in anderen Partitionen angesiedelt sind.
Zeile 129: Zeile 129:
|-
|-
| | '''-d '''
| | '''-d '''
| | (''no-dereference'') erhält [http://wiki.ubuntuusers.de/ln#Symbolische-Verknuepfungen symbolische Links], folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links)  
| | (''no-dereference'') erhält [https://wiki.ubuntuusers.de/ln#Symbolische-Verknuepfungen symbolische Links], folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links)  
|-
|-
| | '''-f '''
| | '''-f '''
Zeile 180: Zeile 180:
|}
|}


* cp kennt noch eine Reihe von weiteren Optionen, die man mit Hilfe der Option --help aufrufen kann. Oder man schaut in die [http://wiki.ubuntuusers.de/man Manpages] von cp.
* cp kennt noch eine Reihe von weiteren Optionen, die man mit Hilfe der Option --help aufrufen kann. Oder man schaut in die [https://wiki.ubuntuusers.de/man Manpages] von cp.
* Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde.  
* 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:  
* Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind:  
Zeile 200: Zeile 200:
|}
|}


=== Parameter ===
=== Argumente ===
=== Umgebungsvariablen ===
=== Umgebung ===
=== Exit-Status ===
=== Rückgabewert ===
== Konfiguration ==
== Konfiguration ==
=== Dateien ===
=== Dateien ===
Zeile 208: Zeile 208:
== Dokumentation ==
== Dokumentation ==
=== RFC ===
=== RFC ===
=== Man-Pages ===
=== Man-Page ===
=== Info-Pages ===
=== Info-Pages ===


Zeile 220: Zeile 220:




== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


[[Kategorie:Linux/Befehl]]
[[Kategorie:Linux/Befehl]]

Aktuelle Version vom 11. Mai 2025, 20:52 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 beispielsweise 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 (https://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

Argumente

Umgebung

Rückgabewert

Konfiguration

Dateien

Sicherheit

Dokumentation

RFC

Man-Page

Info-Pages

Siehe auch

  1. dd

Links

Projekt

Weblinks

  1. https://wiki.ubuntuusers.de/cp/