Il complesso include / esclude con rsync


14

Sto cercando di elaborare la sintassi del filtro rsync per eseguire inclusioni / esclusioni complesse e sto cercando di ottenere quanto segue:

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

Ho provato molte varianti della sintassi del filtro e, nonostante abbia letto molte volte la pagina man, non riesco a ottenere questo tipo di effetto. I filtri Rsync sembrano essere molto potenti e trovo difficile credere che non siano in grado di gestire uno scenario comune come questo.

Risposte:


17

È necessario includere tutte le directory principali fino alla directory desiderata prima di utilizzare la regola di esclusione.

Ad esempio, utilizzo quanto segue in uno script di backup:

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

Quindi nel tuo caso avresti bisogno di qualcosa di simile al seguente:

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

Eccellente. Mi ci è voluto del tempo.
yclian,

In qualche modo, quando ho letto il man rsync, ho frainteso l'ordine corretto di mescolare include ed esclude. Mi ci è voluta un'ora per capirlo ...
Adam Ryczkowski il

6

Sulla riga di comando:

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

Rimuovi --dry-runper renderlo funzionale, sostituisci "DEST" con la tua destinazione e aggiungi utente e host all'origine "/" se necessario.

Da un file di regole:

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

dove il contenuto di /etc/rsync/somerules.rulespotrebbe essere:

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

Dovresti testarli e potrebbe essere necessario apportare alcune modifiche, ma questo dovrebbe iniziare.


OK, funziona. Ho un caso più complesso che ho aggiunto alla domanda. L'inclusione aggiuntiva non funziona con lo scenario subdir.
brianmathis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.