Rsync ist ein schnelles und vielseitiges Befehlszeilenprogramm, das Dateien und Ordner zwischen zwei Standorten über eine Remote-Shell synchronisiert.
Mit Rsync können Sie Daten spiegeln, inkrementelle Backups erstellen und Dateien zwischen Systemen kopieren. Beim Kopieren von Daten möchten Sie möglicherweise eine oder mehrere Dateien oder Verzeichnisse basierend auf ihrem Namen oder Speicherort ausschließen.
In diesem Tutorial zeigen wir Ihnen, wie Sie Dateien und Verzeichnisse mit rsync ausschließen.
Bevor Sie beginnen #
Sie sollten grundlegende Kenntnisse darüber haben, wie rsync funktioniert.
In den folgenden Beispielen verwenden wir rsync mit -a
, Möglichkeit. Dies weist rsync an, Verzeichnisse rekursiv zu synchronisieren, spezielle und blockierte Geräte zu übertragen und symbolische Links, Änderungszeiten, Gruppen, Eigentümer und Berechtigungen beizubehalten.
Wenn Sie Dateien oder Verzeichnisse ausschließen, müssen Sie ihre relativen Pfade zum Quellverzeichnis verwenden.
Es gibt zwei Möglichkeiten, die Dateien und Verzeichnisse anzugeben, die Sie ausschließen möchten:
- Über eine Befehlszeile , indem Sie
--exclude
verwenden Möglichkeit. - Aus einer Datei , indem Sie
--exclude-from
verwenden Möglichkeit.
Eine bestimmte Datei ausschließen #
Um eine bestimmte Datei auszuschließen, übergeben Sie den relativen Pfad zu der Datei an --exclude
Option.
Im folgenden Beispiel die Datei src_directory/file.txt
werden nicht übertragen:
rsync -a --exclude 'file.txt' src_directory/ dst_directory/
Ein bestimmtes Verzeichnis ausschließen #
Das Ausschließen eines bestimmten Verzeichnisses ist dasselbe wie das Ausschließen einer Datei, übergeben Sie einfach den relativen Pfad zum Verzeichnis an --exclude
Option wie unten gezeigt:
rsync -a --exclude 'dir1' src_directory/ dst_directory/
Wenn Sie den Inhalt des Verzeichnisses, aber nicht das Verzeichnis selbst ausschließen möchten, verwenden Sie dir1/*
statt dir1
:
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/
Mehrere Dateien oder Verzeichnisse ausschließen #
Um mehrere Dateien oder Verzeichnisse auszuschließen, geben Sie einfach mehrere --exclude
an Optionen:
rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/
Wenn Sie lieber einen einzelnen --exclude
verwenden möchten Option können Sie die Dateien und Verzeichnisse, die Sie ausschließen möchten, in geschweiften Klammern auflisten {}
wie unten gezeigt durch ein Komma getrennt:
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
Wenn die Anzahl der Dateien und/oder Verzeichnisse, die Sie ausschließen möchten, groß ist, verwenden Sie anstelle mehrerer --exclude
Optionen können Sie die Dateien und Verzeichnisse, die Sie ausschließen möchten, in einer Datei angeben und die Datei an --exclude-from
übergeben Option.
Der folgende Befehl macht genau dasselbe wie der obige:
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
Ausschlussdatei.txtfile1.txt
dir1/*
dir2
Mehrere Dateien oder Verzeichnisse basierend auf einem Muster ausschließen #
Mit rsync können Sie auch Dateien und Verzeichnisse basierend auf einem Muster ausschließen, das mit dem Datei- oder Verzeichnisnamen übereinstimmt.
Zum Beispiel, um alle .jpg
auszuschließen Dateien, die Sie ausführen würden:
rsync -a --exclude '*.jpg*' src_directory/ dst_directory/
Etwas kniffliger ist es, alle anderen Dateien und Verzeichnisse auszuschließen, außer denen, die einem bestimmten Muster entsprechen. Angenommen, Sie möchten alle anderen Dateien und Verzeichnisse ausschließen, mit Ausnahme der Dateien, die auf .jpg
enden .
Eine Möglichkeit ist die Verwendung des folgenden Befehls:
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
Bei Verwendung mehrerer Optionen zum Einschließen/Ausschließen gilt die erste Übereinstimmungsregel.
--include='*.jpg'
- Zuerst fügen wir alle.jpg
ein Dateien.--include='*/'
- Dann schließen wir alle Verzeichnisse innerhalb vonsrc_directory
ein Verzeichnis. Ohne dieses wird rsync nur*.jpg
kopieren Dateien im obersten Verzeichnis.-m
- Entfernt die leeren Verzeichnisse.
Eine andere Möglichkeit wäre, die Ausgabe von find
zu pipen commandto rsync:
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
-printf %P\\0\\n
- entfernt dassrc_directory/
aus dem Dateipfad.--files-from=-
- bedeutet, dass nur die Dateien aus der Standardeingabe aufgenommen werden (Dateien, die vom Find-Befehl übergeben werden).
Schlussfolgerung #
In diesem Tutorial haben Sie gelernt, wie Sie Dateien und Verzeichnisse beim Übertragen von Daten mit Rsync ausschließen. Auf der Handbuchseite des Rsync-Benutzers gibt es noch viel mehr über Rsync zu erfahren.