Linux / Befehl cp: Dateien und Verzeichnisse kopieren

cp kopiert Dateien und mit einer rekursiven Option auch Verzeichnisse. Prüfen Sie, ob das Ziel bereits ein Verzeichnis ist und ob Dateien überschrieben werden können. Für wichtige Kopien sollten Sie zusätzlich Inhalt und benötigte Metadaten überprüfen.

Die Beispiele verwenden das Verhalten von GNU Coreutils. Prüfen Sie cp --help, man cp und die Dokumentation Ihrer Distribution, wenn Portabilität oder eine versionsspezifische Option wichtig ist.

Ergänzende Befehle und Anwendungsfälle finden Sie in Wesentliche Linux-Befehle: Eine praktische Referenz nach Aufgaben.

Was ist der Befehl cp?

cp kopiert Dateien und mit einer rekursiven Option Verzeichnisbäume. Eine kopierte reguläre Datei ist unabhängig vom Original und hat normalerweise einen anderen Inode. Das genaue Zielverzeichnis hängt davon ab, ob das letzte Argument bereits als Verzeichnis existiert.

Grundlegende Syntax

cp [OPTION]... [-T] SOURCE DESTINATION
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

Setzen Sie Anführungszeichen um Pfade, die Leerzeichen enthalten. Wenn unterstützt, setzen Sie -- vor Operanden, die mit einem Bindestrich beginnen, damit sie nicht als Optionen interpretiert werden.

Grundlegende Verwendung von cp

Kopieren einer Datei unter einem neuen Namen

Bei zwei Dateipfaden liest cp die erste Datei und schreibt eine Kopie an die zweite Stelle.

cp report.txt report-backup.txt

Kopiere mehrere Dateien in ein Verzeichnis

Wenn mehrere Quellen angegeben werden, muss der letzte Operand ein existierendes Zielverzeichnis sein.

cp index.html style.css public/

Kopiere einen Verzeichnisbaum

Verwenden Sie -R für Rekursion. Ziehen Sie -a in Betracht, wenn Links und Metadaten so weit wie möglich gemäß der Plattform erhalten bleiben sollen.

cp -R src src-copy
cp -a app/ app-backup/

Überprüfen, ob die kopierte Datei die gleiche ist

cp gibt normalerweise nichts aus, selbst wenn es erfolgreich ist. Bei wichtigen Kopiervorgängen überprüfen Sie nicht nur die Existenz der Zieldatei, sondern auch deren Inhalt.

printf 'demo\n' > original.txt
cp original.txt copy.txt
cmp -s original.txt copy.txt
echo $?

Die Beispielausgabe ist 0, was bedeutet, dass die Byte-Inhalte der beiden Dateien identisch sind. cmp überprüft jedoch keine Metadaten wie Besitz, Berechtigungen oder erweiterte Attribute, daher überprüfen Sie bei Bedarf auch stat.

Wichtige Optionen

Option Zweck
-R, -r Verzeichnisse rekursiv kopieren.
-a Archivmodus: rekursiv und Links sowie Attribute nach Möglichkeit beibehalten.
-p Modus, Besitz und Zeitstempel nach Möglichkeit beibehalten.
-i Vor dem Überschreiben eines vorhandenen Ziels nachfragen.
-n Vorhandene Zieldateien nicht überschreiben.
-u Gemäß den Update-Bedingungen kopieren, z. B. wenn die Quelle neuer ist.
-T Das Ziel als exakten Pfad behandeln, nicht als Verzeichnis.
-t DIR Geben Sie das Zielverzeichnis vor der Quellliste an.
--reflink[=WHEN] Fordern Sie Copy-on-Write-Klonen auf unterstützten Dateisystemen an.

Lange Optionen machen überprüfte Skripte oft leichter verständlich. Wenn ein Skript auf Nicht-GNU-Systemen laufen muss, überprüfen Sie jede nicht-POSIX-Option auf der Zielplattform.

Praktische Beispiele

Steuern Sie das Überschreiben

Verwenden Sie -i für eine interaktive Entscheidung. Verwenden Sie -n, wenn die Automatisierung vorhandene Dateien beibehalten muss, und überprüfen Sie anschließend das Ergebnis.

cp -iv config.ini backup/
cp -nv *.conf backup/

Attribute für eine Sicherungskopie beibehalten

Der Archivmodus versucht, Symlinks, Berechtigungen, Zeitstempel und andere unterstützte Attribute zu erhalten. ACLs, xattrs, SELinux-Labels und Eigentum hängen weiterhin von den Berechtigungen und der Unterstützung des Dateisystems ab.

sudo cp -a /etc/myapp/ /backup/myapp/
cp -a --preserve=all source/ destination/

Überprüfen Sie wichtige Kopien

Für kritische Dateien sollten Hashes verglichen werden, anstatt nur Namen oder Größen zu prüfen. Ein lebender, sich ändernder Datensatz kann eine Snapshot- oder anwendungsbewusste Backup-Methode erfordern.

sha256sum source.img copied.img
diff -qr source-dir copied-dir

cp und verwandte Befehle

Befehl oder Methode Hauptrolle Geeignet für
cp Lokales Kopieren von Dateien und Verzeichnissen Einfache Kopien
mv Verschieben oder Umbenennen von Pfaden Die Quelle sollte nicht verbleiben
rsync Inkrementelle und Remote-Synchronisation Große wiederholte oder Netzwerktransfers
install Kopieren während der Attribute gesetzt werden Programminstallation und -bereitstellung

Wichtige Hinweise

Der Zieltyp ändert das Ergebnis

Wenn der letzte Operandenverzeichnis existiert, wird die Quelle darin abgelegt. Verwenden Sie -T oder -t, wenn ein Skript diese Absicht explizit machen soll.

Archivmodus ist kein vollständiges Sicherungssystem

Offene Dateien, laufende Datenbanken, Berechtigungen und nicht unterstützte Dateisystemfunktionen können eine konsistente Kopie verhindern. Testen Sie die Wiederherstellung mit einem geeigneten Backup-Workflow.

Shell-Globs können versteckte Einträge auslassen

Ein Muster wie source/* schließt normalerweise Dotfiles aus. Überprüfen Sie die Pfadsyntax und die Einschlussregeln, bevor Sie den Inhalt eines Verzeichnisses kopieren.

FAQ

Soll ich -R oder -a für ein Verzeichnis verwenden?

Verwenden Sie -R für grundlegende Rekursion und -a, wenn das Beibehalten von Links und unterstützten Metadaten wichtig ist.

Wie verhindere ich das Überschreiben bestehender Dateien?

GNU cp stellt -n bereit. Bestätigen Sie das genaue Verhalten in der installierten Version.

Warum erscheint ein kopiertes Verzeichnis auf einer anderen Ebene als erwartet?

Das Ergebnis hängt davon ab, ob das Ziel existiert und ob es als Verzeichnis behandelt wird. Verwenden Sie -T oder -t, um Mehrdeutigkeiten zu vermeiden.

Wie überprüfe ich eine Kopie?

Vergleichen Sie die Hashes für Dateien und verwenden Sie Werkzeuge wie diff -qr für Verzeichnisbäume. Ein echtes Backup benötigt auch einen Wiederherstellungstest.

Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU Coreutils cp Dokumentation und GNU Coreutils-Handbuch.