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.

brianmathis
quelle

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
Shane Meyers
quelle
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.

Bis auf weiteres angehalten.
quelle
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