Come escludere i file in rsync?


12

Sto usando Ubuntu Server 12.04, ora voglio fare il backup di alcuni file usando rsync, ecco un tentativo:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Come puoi vedere, voglio eseguire il backup di tutti i file nella cartella $ HOME / Documenti nella cartella $ HOME / Backup / TEST , ma escludo i file nella cartella un altro e temp . Ma ho fallito, rsync ha comunque copiato i file in entrambe le cartelle escluse:

ls $HOME/Backups/TEST/another
test

Test è un file nella cartella di un'altra , ed è anche copiato se io escludo il file in rsync, perché? Come consentire che quei file vengano effettivamente esclusi?

Risposte:


11

Esistono diversi problemi con il comando rsync (consultare anche la manpage di rsync per una spiegazione dettagliata delle regole di filtro).

  • abbiamo bisogno di un --excludecomando ciascuno per ogni dato schema.
  • i percorsi indicati devono essere relativi al percorso di origine (nessun percorso assoluto).
  • le opzioni devono essere fornite prima di indicare la fonte e la destinazione.

Per il tuo esempio funzionerà la seguente sintassi:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Si noti che se un pattern exlude termina con /esso si riferisce a una directory. Se si omettono entrambi, i file e le directory con quel nome verranno esclusi. Sostituiscilo con un carattere jolly *per escludere tutti i file o le directory con quella stringa nei loro nomi.


6
Questo non è del tutto corretto. Non sono sicuro di come funzioni, ma dalla sperimentazione, --exclude=/foola directory verrà esclusa foodirettamente nella sorgente, ma --exclude=fooescluderà qualsiasi directory denominata pippo, anche nelle sottodirectory.
Sparhawk,

10

Potrebbe essere più semplice aggiungere .rsync-filterfile nelle directory di origine e utilizzare l' -Fopzione.

Dalla pagina man:

-F: l'opzione -F è una scorciatoia [...] per questa regola:

 --filter='dir-merge /.rsync-filter'

Questo dice a rsync di cercare i file .rsync-filter per directory che sono stati cosparsi nella gerarchia e usare le loro regole per filtrare i file nel trasferimento.

Ad esempio: in $ HOME / Documenti / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Invece di -, puoi anche scrivere l'intera parola exclude.

Ora puoi

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
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.