Komplex schließt mit rsync ein / aus


14

Ich versuche, die Syntax des rsync-Filters zu erarbeiten, um komplexe Einschluss- / Ausschlussvorgänge auszuführen, und versuche, Folgendes zu erreichen:

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

Ich habe viele Variationen der Filtersyntax ausprobiert, und obwohl ich die Manpage viele Male gelesen habe, kann ich diese Art von Effekt nicht erzielen. Rsync-Filter scheinen sehr leistungsfähig zu sein, und ich kann mir kaum vorstellen, dass sie mit einem solchen Szenario nicht zurechtkommen.

Antworten:


17

Sie müssen alle übergeordneten Verzeichnisse in das gewünschte Verzeichnis einschließen, bevor Sie die Ausschlussregel verwenden können.

In einem Backup-Skript verwende ich beispielsweise Folgendes:

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

In Ihrem Fall benötigen Sie also Folgendes:

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST

Ausgezeichnet. Hat einige Zeit gedauert.
yclian

Irgendwie habe ich beim Lesen des man rsyncdie richtige Reihenfolge des Mischens von Einschluss und Ausschluss falsch verstanden. Ich habe eine Stunde
gebraucht, um

6

In der Befehlszeile:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Entfernen Sie --dry-run, um es funktionsfähig zu machen, ersetzen Sie "DEST" durch Ihr Ziel und fügen Sie bei Bedarf Benutzer und Host zur Quelle "/" hinzu.

Aus einer Regeldatei:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

wo der Inhalt sein /etc/rsync/somerules.ruleskönnte:

+/ /home/user1
-/ /home/*

Sie sollten diese testen und möglicherweise einige Anpassungen vornehmen, dies sollte Ihnen jedoch den Einstieg erleichtern.


OK, das funktioniert. Ich habe einen komplexeren Fall, den ich der Frage hinzugefügt habe. Das zusätzliche Include funktioniert im Subdir-Szenario nicht.
Brianmathis
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.