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.