[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 32, align=left)]] '''cp''' steht für '''c'''o'''p'''y und ist der Befehl zum Kopieren, es können Dateien oder ganze Verzeichnisse kopiert werden. Verzeichnisse können optional auch rekursiv, also inklusive Unterverzeichnissen, kopiert werden. = Installation = Das Programm ist im essentiellen Paket * '''coreutils''' von Ubuntu enthalten und ist deshalb auf jedem System installiert. = Aufruf = Die allgemeine Syntax lautet [1]: {{{#!vorlage Befehl cp [OPTIONEN] QUELLE ZIEL }}} `QUELLE` und `ZIEL` können dabei sowohl Dateien als auch ein Verzeichnis sein. Während die Angabe von mehreren Quellen möglich ist, kann hingegen immer nur ein Ziel angegeben werden. {{{#!vorlage Tabelle <-2 tableclass="zebra_start3"; rowclass="titel" :>'''Optionen von cp''' +++ '''Option''' '''Beschreibung''' +++ `-a` oder `--archive` Beibehaltung von Besitzer-, Gruppen- und Zugriffsrechten und Erstellungs-, Modifikations- und Zugriffsdaten (entspricht `-dR --preserve=all`) +++ `-b` oder `--backup` Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind +++ `-d` erhält [:ln#Symbolische-Verknuepfungen: symbolische Links], folgt ihnen aber nicht beim Kopieren (entspricht `-P --preserve=links`) +++ `-i` oder `--interactive` fragt vor Überschreiben nach +++ `-l` oder `--link` kopiert nicht, sondern erstellt [:ln#Hardlinks:harten Link] +++ `-n` oder `--no-clobber ` niemals vorhandene Dateien überschreiben (`-i` wird wirkungslos) +++ `-p` (klein) oder `--preserve=mode,ownership,timestamps` erhält Standard-Dateiattribute wie Zeitpunkt des letzten Schreibzugriffs, Besitzer-, Gruppen- und Zugriffsrechten +++ `-P` (groß) oder `--no-dereference` Symbolische Links als symbolische Links kopieren, statt den Links in der Quelle zu folgen +++ `-r` oder `-R` oder `--recursive` Verzeichnisse rekursiv kopieren (Unterverzeichnisse eingeschlossen) +++ `-s` oder `--symbolic-link` kopiert nicht, sondern erstellt symbolischen Link +++ `-u` oder `--update` kopiert nur, wenn Zieldatei älter als Quelldatei +++ `-v` oder `--verbose` Durchgeführte Tätigkeiten "erklären" / anzeigen }}} cp kennt noch eine Reihe von weiteren Optionen, die man mit Hilfe der Option `--help` aufrufen kann. Oder man schaut in die [:man:Manpage] von cp. = Beispiele = Die Datei '''datei.txt''' aus dem aktuellen Verzeichnis nach '''/home/BENUTZER/Dokumente''' kopieren, falls diese neuer ist als die bestehende: {{{#!vorlage Befehl cp -u datei.txt /home/BENUTZER/Dokumente/datei.txt }}} Die Dateien '''datei.txt''', '''dokument.odt''' nach '''/home/BENUTZER/Dokumente''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen: {{{#!vorlage Befehl cp -uv datei.txt dokument.odt /home/BENUTZER/Dokumente }}} Dateien mit bestimmtem Anfangsbuchstaben '''da*.txt''', '''do*.odt''' kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen: {{{#!vorlage Befehl cp -uv da*.txt do*.odt /home/BENUTZER/Dokumente }}} Im letzten Beispiel werden alle Dateien aus '''/home/BENUTZER''' samt der versteckten Einstellungsdateien rekursiv ins Verzeichnis '''Sicherungen''' kopiert, welches sich auf dem [:mount:eingehängten] Laufwerk '''sda9''' befindet. {{{#!vorlage Befehl cp -a /home/BENUTZER/. /media/sda9/Sicherungen }}} = Dateien/Ordner ausschließen = Leider enthält '''cp''' keine `--exclude`-Option wie andere Kopierprogramme, jedoch gibt bereits die [:Shell:] einen Weg her, der es ermöglicht ressourcensparend Muster auszuschließen. Dazu muss z.B. in bash die Shell-Option extglob gesetzt werden, die den erweiterten Musterabgleich aktiviert (extended [wikipedia_en:globbing:]): {{{#!vorlage Befehl shopt -s extglob }}} Der Befehl muss jedes mal ausgeführt werden oder man trägt ihn in die [:Bash/bashrc:bashrc] ein. Im Folgenden der angewandte cp-Befehl: {{{#!vorlage 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. = Live-USB-Stick erstellen = Man kann mit Hilfe von cp auch einen Live-USB-Stick erstellen, ohne die Programme [:dd:] oder [:UNetbootin:] nutzen zu müssen. Dazu muss aber der Stick ausgehängt sein. Außerdem ist es wichtig, dass man als Ziel die Gerätedatei und nicht den Namen des Einhängepunktes anspricht. Befehlsschema: {{{#!vorlage Befehl sudo cp PFAD/ZUR/ISO.iso /dev/USB_DEVICE}}} Beispiel: {{{#!vorlage Befehl sudo cp Downloads/ubuntu-12.04.3-desktop-amd64.iso /dev/sdb }}} = Statusanzeige = Einige Distribution bieten cp mit der Option `-g` an. Bei größeren Kopierzeiten wird dann ein Statusbalken angezeigt. Um dies in Ubuntu zu erreichen, muss man entweder einen sogenannten ''progress bar''-Patch einspielen, auf Skripte oder gleich [:rsync:] zurückgreifen. = Links = == intern == * [:pycp:] - Kopierbefehl mit grafischer Fortschrittanzeige und Angabe der Kopiergeschwindigkeit * [:Shell/Befehlsübersicht:] {Übersicht} Übersicht über verschiedene Shell-Befehle == extern == * [man_de:cp:Manpage] {de} * [http://www.gnu.org/software/coreutils/ GNU Core Utilities] {en} * [http://lifeonubuntu.com/keep-existing-file-attributes-during-copy/ Life on Ubuntu - Dateiattribute behalten] {en} # tag: Shell, Datensicherung, Backup