cp

Aus Foxwiki
Version vom 8. September 2024, 10:29 Uhr von Dirkwagner (Diskussion | Beiträge) (Textersetzung - „= Umgebungsvariablen =“ durch „= Umgebung =“)

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.

Syntax

$ 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

Parameter

Umgebung

Rückgabewert

Konfiguration

Dateien

Sicherheit

Dokumentation

RFC

Man-Pages

Info-Pages

Siehe auch

  1. dd

Links

Projekt

Weblinks

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