Verzeichnisse in Linux mit cp und rsync kopieren
Ein Verzeichnis ist eine Struktur im Dateisystem, die Dateien und weitere Verzeichnisse speichert. Es dient dazu, Daten in einer hierarchischen Form zu organisieren, was sowohl Benutzern als auch dem Betriebssystem die Verwaltung erleichtert. Jedes Verzeichnis kann Dateien und Unterverzeichnisse enthalten, wodurch eine baumartige Struktur entsteht, die sich über mehrere Ebenen erstrecken kann.
In dieser Anleitung erfahren Sie, wie Sie ein Verzeichnis in Linux mit den Befehlen cp
und rsync
kopieren.
Voraussetzungen
- Zugriff auf ein Linux-System mit einem Nicht-Root-Benutzerkonto mit Sudo-Rechten.
Befehle zum Kopieren von Verzeichnissen in Linux
Im Folgenden finden Sie die Befehle, mit denen sich Verzeichnisse in Linux kopieren lassen.
cp-Befehl
Der Befehl cp
kopiert Dateien und Verzeichnisse unter Linux. Er ist in allen Linux-Distributionen verfügbar und hat folgende Syntax:
cp [OPTIONEN]... [QUELLE] [ZIEL]
- OPTIONEN: Parameter, die das Verhalten des Befehls anpassen.
- QUELLE: Die Datei oder das Verzeichnis, das kopiert werden soll.
- ZIEL: Der Zielpfad oder ein neuer Dateiname. Falls das Zielverzeichnis nicht existiert, wird es automatisch angelegt.
Optionen für den cp-Befehl
-r
oder-R
: Verzeichnisse samt Inhalt rekursiv kopieren.-a
: Rekursiv kopieren und symbolische Links, Berechtigungen, Eigentümer und Zeitstempel beibehalten.-v
: Kopiervorgang detailliert anzeigen.-p
: Dateiattribute wie Modus, Eigentümer und Zeitstempel beibehalten.
rsync-Befehl
Mit rsync
lassen sich Dateien und Verzeichnisse zwischen zwei Speicherorten – lokal oder remote – synchronisieren. Der Befehl kann sowohl lokal kopieren als auch Daten zwischen einem lokalen und einem entfernten System übertragen. rsync
nutzt Zeitstempel und Dateigrößen, um Änderungen zu erkennen, was ihn ideal für Backups und große Datenmengen macht.
Lokales Kopieren
rsync [OPTIONEN]... [QUELLVERZEICHNIS]/ [ZIELVERZEICHNIS]/
Von lokal zu remote kopieren
rsync [OPTIONEN]... [QUELLVERZEICHNIS]/ [BENUTZER@REMOTE_HOST]:[ZIELVERZEICHNIS]/
Von remote zu lokal kopieren
rsync [OPTIONEN]... [BENUTZER@REMOTE_HOST]:[QUELLVERZEICHNIS]/ [ZIELVERZEICHNIS]/
Erklärung der Syntax
- OPTIONEN: Parameter wie
-a
(Archivmodus),-v
(detaillierte Ausgabe) oder-r
(rekursiv kopieren). - QUELLVERZEICHNIS/: Das zu kopierende Verzeichnis. Ein abschließender Slash bewirkt, dass nur der Inhalt kopiert wird, nicht das Verzeichnis selbst.
- ZIELVERZEICHNIS/: Zielordner, der automatisch erstellt wird, falls er nicht existiert.
- BENUTZER@REMOTE_HOST: Gibt bei Remote-Übertragungen Benutzer, Host oder IP-Adresse an.
Optionen für den rsync-Befehl
-a
: Archivmodus (inkl. rekursivem Kopieren, symbolischen Links, Berechtigungen, Zeitstempeln, Eigentümerinformationen).-v
: Kopiervorgang detailliert ausgeben.-r
: Verzeichnisse und deren Inhalte rekursiv kopieren.-z
: Daten während der Übertragung komprimieren, um Bandbreite zu sparen.
Verzeichnis mit dem cp-Befehl kopieren
Die folgenden Schritte zeigen, wie Sie eine Verzeichnisstruktur erstellen, Dateien hinzufügen und Verzeichnisse mit cp
unter Verwendung verschiedener Optionen kopieren.
- Ein neues Verzeichnis im aktuellen Arbeitsverzeichnis erstellen:
$ mkdir sample
- In das neu erstellte Verzeichnis wechseln:
$ cd sample
- Eine Datei mit dem Namen
file1.txt
anlegen:
$ touch file1.txt
- Inhalt in die Datei
file1.txt
schreiben:
$ echo "Dies ist eine Beispieldatei im Hauptverzeichnis." > file1.txt
- Ein Unterverzeichnis
folder1
im Verzeichnissample
erstellen:
$ mkdir folder1
- Eine Datei in
folder1
erstellen:
$ touch folder1/file2.txt
- Inhalt in diese Datei schreiben:
$ echo "Diese Datei befindet sich in folder1." > folder1/file2.txt
folder1
infolder1-backup
kopieren:
$ cp -r folder1 folder1-backup
Die Option -r
sorgt dafür, dass der gesamte Inhalt rekursiv kopiert wird.
- Inhalte auflisten, um die Kopie zu prüfen:
$ ls -R
- Zum übergeordneten Verzeichnis wechseln:
$ cd ..
- Das komplette Verzeichnis
sample
nachsample-copy
kopieren:
$ cp -r sample sample-copy
- Mit den Optionen
-v
und-p
kopieren:
$ cp -rvp sample sample-copy-rvp
- Mit der Option
-a
kopieren:
$ cp -a sample sample-copy-a
- Kopien und deren Struktur überprüfen:
$ ls -l sample sample-copy sample-copy-rvp sample-copy-a
In der Ausgabe sehen Sie, dass sample-copy
ein neueres Datum hat, da es ohne -p
oder -a
kopiert wurde. Die Kopien mit -rvp
und -a
haben die ursprünglichen Zeitstempel und Berechtigungen beibehalten.
Verzeichnis mit rsync kopieren
rsync
ist ein leistungsfähiges Kommandozeilenwerkzeug, um Dateien und Verzeichnisse zu synchronisieren. Es ist umfangreicher als cp
und eignet sich besonders für Backups, Teilaktualisierungen und große Datenübertragungen. Im Gegensatz zu cp
überträgt rsync
nur Unterschiede zwischen Quelle und Ziel, was Zeit und Bandbreite spart. Befolgen Sie die folgenden Schritte, um Verzeichnisse mit rsync
zu kopieren.
rsync
ist auf den meisten Linux-Systemen standardmäßig installiert. Überprüfen Sie mit folgendem Befehl, ob es vorhanden ist:
$ rsync --version
Falls rsync
fehlt, folgen Sie den Installationsanweisungen.
Wechseln Sie in das Verzeichnis, das den Ordner sample
enthält.
Struktur des Ordners sample
anzeigen:
$ ls -R sample
Den Ordner sample
mit rsync
in ein neues Verzeichnis kopieren:
$ rsync -av sample/ sample-rsync/
Dieser Befehl kopiert den Inhalt von sample
in sample-rsync/
im Archivmodus, behält Attribute bei und zeigt den Fortschritt an.
Kopiertes Verzeichnis prüfen:
$ ls -R sample-rsync
Eine neue Datei in sample
hinzufügen:
$ echo "Dies ist eine neue Datei." > sample/extra.txt
Diese Datei existiert noch nicht in sample-rsync
.
Änderungen ohne Ausführung mit --dry-run
anzeigen lassen:
$ rsync -av --dry-run sample/ sample-rsync/
Ausgabe:
sending incremental file list
./
extra.txt
sent 254 bytes received 24 bytes 556.00 bytes/sec
total size is 123 speedup is 0.44 (DRY RUN)
Hinweis: extra.txt
erscheint in der Liste, da es neu ist. rsync
erkennt Änderungen und listet nur diese auf.
Mit --progress
den Ordner aktualisieren und den Fortschritt sehen:
$ rsync -av --progress sample/ sample-rsync/
Ausgabe:
sending incremental file list
./
extra.txt
20 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
sent 314 bytes received 40 bytes 708.00 bytes/sec
total size is 123 speedup is 0.35
Hier wird nur extra.txt
übertragen.
Geändertes Verzeichnis prüfen:
$ ls -R sample-rsync
Datei aus sample
löschen:
$ rm sample/extra.txt
Mit --delete
Dateien im Ziel löschen, die in der Quelle nicht mehr vorhanden sind:
$ rsync -av --delete sample/ sample-rsync-copy/
Prüfen, ob beide Verzeichnisse synchron sind:
$ ls -l sample sample-rsync
Ausgabe:
sample:
total 12
-rw-rw-r-- 1 user user 45 May 7 06:06 file1.txt
drwxrwxr-x 2 user user 4096 May 7 06:06 folder1
drwxrwxr-x 2 user user 4096 May 7 06:07 folder1-backup
sample-rsync:
total 12
-rw-rw-r-- 1 user user 45 May 7 06:06 file1.txt
drwxrwxr-x 2 user user 4096 May 7 06:06 folder1
drwxrwxr-x 2 user user 4096 May 7 06:07 folder1-backup
Wie man sieht, wurde extra.txt
entfernt, während die übrige Struktur erhalten blieb.
Fazit
Sie haben gelernt, wie Sie Verzeichnisse in Linux mit den Befehlen cp
und rsync
kopieren. Beide Methoden haben je nach Anwendungsfall ihre Vorteile. Weitere Optionen finden Sie in den Handbuchseiten mit den Befehlen man cp
und man rsync
.