How to Rsync-Exclude
Featuring /dir/ /dir dir/ und dir*
22. Feb. 2020
Hier einige Beispiele, wie man mit rsync
das exkludiert,
was man exkludieren möchte und nicht mehr und nicht weniger.
Zur Demonstration folgen einige rsync
-Aufrufe, die teile eines exemplarischen
Quellverzeichnisses src
in ein Zielverzeichnis dst
kopieren.
Das Quellverzeichnis sieht folgerndermaßen aus:
src:
├── dir1
│ └── dir11
│ ├── file1
│ └── file2
├── dir2
│ ├── dir1
│ └── dir21
├── file1
└── file2
Die Verzeichnisansichten in diesem Post wurden mit dem Kommandozeilentool tree
erzeugt
Ordner ausschließen
Der Befehl rsync -a --exclude '/dir1' src/ dst
erzeugt folgendes im Zielverzeichnis:
dst:
├── dir2
│ ├── dir1
│ └── dir21
├── file1
└── file2
dir1
im Arbeitsverzeichnis wurde ausgelassen. /dir2/dir1
ist noch da.
Ergo: Das /
am Anfang von /dir1
führt dazu, dass vom aktuellen Verzeichnis
ausgegangen wird.
rsync
geht immer vom aktuellen Arbeitsverzeichnis aus.
--exclude '/dir1'
führt also nicht dazu, dass Ordner oder Dateien mit dem
Namen dir1
aus Unterverzeichnissen ignoriert werden.
Weiterhin bedeutet es nicht, dass im Wurzelverzeichnis /
des Systems gesucht wird.
Das anfügen eines /
am Quellverzeichnis src
führt dazu, dass nur der Inhalt des Quellverzeichnisses
kopiert wird, nicht das Verzeichnis selbst.
Es macht also ein Unterschied, ob man rsync -a src dst
oder rsync -a src/ dst
aufruft.
Hier das Zielverzeichnis, wenn /
weg gelassen wird:
dst:
├── dir2
│ └── dir21
├── file1
└── file2
Hier fehlt dir1
sowohl im Arbeits- als auch im Unterverzeichnis.
Ordner inkludieren, inhalte ausschließen
Mittels --exclude '/dir1/*'
können Ordner synchronisiert werden, deren
Inhalte aber ausgeschlossen werden:
dst:
├── dir1
├── dir2
│ ├── dir1
│ └── dir21
├── file1
└── file2
Dateien/Ordner ausschließen
Dateien werden natürlich genauso wie Ordner von den mit --exclude
angegebenen
Mustern ausgeschlossen. Beispiel: --exclude 'file*'
schließt Dateien und Ordner
aus, die mit file
beginnen:
dst:
├── dir1
│ └── dir11
└── dir2
├── dir1
└── dir21
--exclude 'file*/'
würde lediglich Ordner ausschließen, die mit der Zeichenkette file
beginnen.
Mehrere Muster ausschließen
Selbstverständlich kann --exclude
auch mehrfach andeinandergereiht werden:
`rsync -a --exclude '/dir1' --exclude '/dir2' src/ dst
Vieles ausschließen
Hat man sehr viel auszuschließen, kann der Parameter --exclude-from 'exclude-list.txt'
genutzt werden..
In diesem Beispiel können in der Datei exclude-list.txt
alle gewünschten
Exclude-Muster in jeweils einer eigenen Zeile angegeben werden.
Kommentare können mit #
eingeleitet werden.
Beispiel für eine exclude-list.txt
:
/dir1
/dir2/*
file1
Eine gute Exclude-Liste für Home-Verzeichnisse ist hier zu finden.