Rsync ist ein sehr leistungsfähiges Tool, um Backups zu erstellen oder Dateien und Verzeichnisse zwischen zwei verschiedenen Standorten (oder Servern) zu synchronisieren.
Das wissen Sie bereits, da wir Ihnen bereits früher praktische Beispiele zu rsync vorgestellt haben.
In einer typischen Sicherungssituation möchten Sie möglicherweise eine oder mehrere Dateien (oder Verzeichnisse) von der Sicherung ausschließen. Möglicherweise möchten Sie auch einen bestimmten Dateityp von rsync ausschließen.
Dieser Artikel erklärt anhand von Beispielen, wie Sie mehrere Dateien und/oder Verzeichnisse während rsync ignorieren.
Erstellen Sie zunächst eine Beispielverzeichnisstruktur wie unten gezeigt (mit einigen leeren Dateien), die zu Testzwecken verwendet werden kann.
$ cd ~ $ mkdir -p source/dir1/dir2 $ mkdir -p source/dir3 $ touch source/file1.txt $ touch source/file2.txt $ touch source/dir1/dir2/file3.txt $ touch source/dir3/file4.txt
Der obige Befehl erstellt ein Quellverzeichnis (unter Ihrem Home-Verzeichnis) mit der folgenden Struktur.
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1. Bestimmtes Verzeichnis ausschließen
Wenn Sie dir1 (einschließlich aller Unterverzeichnisse) nicht vom Quell- in den Zielordner synchronisieren möchten, verwenden Sie die Option rsync –exclude wie unten gezeigt.
$ rm -rf destination $ rsync -avz --exclude 'dir1' source/ destination/ building file list ... done created directory dest ./ file1.txt file2.txt dir3/ dir3/file4.txt
Stellen Sie sicher, dass dir1 nicht vom Quellverzeichnis in das Zielverzeichnis kopiert wird.
$ find destination destination destination/file2.txt destination/file1.txt destination/dir3 destination/dir3/file4.txt
2. Mehrere Verzeichnisse ausschließen, die einem Muster entsprechen
Das folgende Beispiel schließt alle Verzeichnisse (oder Unterverzeichnisse) unter source/ aus, die dem Muster „dir*“
entsprechen$ rm -rf destination $ rsync -avz --exclude 'dir*' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt
Überprüfen Sie das Zielverzeichnis, um sicherzustellen, dass keine Verzeichnisse mit dem Schlüsselwort „dir“ kopiert wurden.
$ find destination destination destination/file2.txt destination/file1.txt
3. Eine bestimmte Datei ausschließen
Um eine bestimmte Datei auszuschließen, verwenden Sie den relativen Pfad der Datei in der Ausschlussoption, wie unten gezeigt.
$ rm -rf destination $ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ dir3/file4.txt
Überprüfen Sie das Zielverzeichnis, um sicherzustellen, dass es nicht die spezifische Datei kopiert hat (dir1/dir2/file3.txt in diesem Beispiel).
$ find destination destination destination/file2.txt destination/file1.txt destination/dir1 destination/dir1/dir2 destination/dir3 destination/dir3/file4.txt
4. Ausschlusspfad ist immer relativ
Wenn Sie nicht aufpassen, könnten Sie diesen Fehler machen.
Im folgenden Beispiel scheint die Exclude-Option einen vollständigen Pfad zu haben (d. h. /dir1/dir2/file3.txt). Aus rsync-Sicht ist der Ausschlusspfad jedoch immer relativ und wird als dir1/dir2/file3.txt behandelt. Im Beispiel unten sucht rsync nach dir1 im Quellverzeichnis (und nicht im /root-Verzeichnis).
$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/
Der obige Befehl ist also genau derselbe wie der folgende. Nur um Verwirrung zu vermeiden (und um es leichter lesbar zu machen), geben Sie kein / vor dem Exclude-Pfad ein.
$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
5. Bestimmten Dateityp ausschließen
Um einen bestimmten Dateityp mit einer bestimmten Erweiterung auszuschließen, verwenden Sie das entsprechende Muster. Um beispielsweise alle Dateien auszuschließen, die .txt als Erweiterung enthalten, gehen Sie wie folgt vor.
$ rsync -avz --exclude '*.txt' source/ destination/ building file list ... done created directory destination ./ dir1/ dir1/dir2/ dir3/
Überprüfen Sie das Zielverzeichnis, um sicherzustellen, dass die *.txt-Dateien nicht kopiert wurden.
$ find destination destination destination/dir1 destination/dir1/dir2 destination/dir3
Hinweis: Das Obige ist sehr hilfreich, wenn Sie Ihr Home-Verzeichnis sichern möchten, aber all diese riesigen Bild- und Videodateien mit einer bestimmten Dateierweiterung ausschließen möchten.
6. Mehrere Dateien und Verzeichnisse gleichzeitig ausschließen
Wenn Sie mehrere Dateien und Verzeichnisse ausschließen möchten, können Sie wie unten gezeigt immer mehrere rsync-Ausschlussoptionen in der Befehlszeile angeben.
$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/
Warte ab. Was wäre, wenn ich unzählige Dateien hätte, die ich von rsync ausschließen möchte?
Ich kann sie nicht immer wieder in der Befehlszeile hinzufügen, indem ich mehrere –exclude verwende, was schwer zu lesen ist und den rsync-Befehl später nur schwer wiederverwenden kann.
Der bessere Weg ist also, die Option rsync –exclude-from zu verwenden, wie unten gezeigt, wo Sie alle Dateien (und Verzeichnisse) auflisten können, die Sie in einer Datei ausschließen möchten.
Erstellen Sie zunächst eine Textdatei mit einer Liste aller Dateien und Verzeichnisse, die Sie nicht sichern möchten. Dies ist die Liste der Dateien und Verzeichnisse, die Sie vom rsync ausschließen möchten.
$ vim exclude-list.txt file1.txt dir3/file4.txt
Als nächstes führen Sie rsync mit der Option –exclude-from mit der exclude-list.txt aus, wie unten gezeigt.
$ rm -rf destination $ rsync -avz --exclude-from 'exclude-list.txt' source/ destination/ building file list ... done created directory destination ./ file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/
Überprüfen Sie das Zielverzeichnis, um sicherzustellen, dass die in der Datei exclude-list.txt aufgelisteten Dateien und Verzeichnisse nicht gesichert sind.
$ find destination destination destination/file2.txt destination/dir1 destination/dir1/dir2 destination/dir1/dir2/file3.txt destination/dir3