Domanda Come escludere più directory con rsync?


Sto provando a fare il backup della mia directory home usando rsync, e voglio escludere alcune delle directory che contengono junk. Voglio escludere in modo specifico /home/ben/.ccache e /home/ben/build. Sfortunatamente la documentazione di rsync era sovraccarico di informazioni e non rispondeva alla mia domanda. Questo è quello che ho provato:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

Qual è il modo giusto per farlo?


136
2017-07-15 23:53


origine


Volevo solo dire che la bandiera a implica r già :) -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) - Populus


risposte:


OK mi sento davvero stupido. Prima di pubblicare questa domanda, il mio amico mi ha mostrato come farlo ed è molto semplice. Per escludere più directory devi usare solo più --exclude=path interruttori. Quindi il mio comando sopra scritto correttamente è il seguente:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

178
2017-07-15 23:53



Un percorso assoluto ha fatto non lavoro per me (la directory specificata è stata silenziosamente non esclusa), mentre un percorso relativo alla directory di origine ha funzionato correttamente. Forse mi manca qualcosa, ma sarei cauto sull'affermazione di @FreeSoftwareServers che i percorsi assoluti funzionano sempre. - Soren Bjornstad
FWIW, un po 'creativo diff l'uso può essere utile. Supponiamo che tu stia modificando i flag di esclusione da eseguire per l'esecuzione nas_backup.sh. Supponiamo anche che stiano usando --dry-run. correre: . nas_backup.sh > dryrun.5.txt, regolare esclude, quindi eseguire . nas_backup.sh > dryrun.6.txt  quindi diff diff dryrun.5.txt dryrun.6.txt | less   questo ti mostrerà cosa è stato aggiunto / rimosso dall'ambito tra quelle due esecuzioni. - JL Peyret
A proposito: l'opzione -a include -r così -ar è ridondante. - David
Contrariamente a quanto credono FreeSoftwareServers, il percorso di esclusione è relativo al percorso di origine, NOT /. Quindi quel commento è categoricamente falso e porterà a fallimenti se lo segui. La strategia migliore è quella di lasciare il comando / nei tuoi esclusi per evitare questo tipo di errore mentale. Se la fonte è dire, / home / me e se si esclude = '/ mydir /' questo esclude la directory mydir in / home / me, cioè esclude / home / me / mydir NOT / mydir / at /. È un peccato che non possa né votare a fondo né modificare quel commento poiché è tecnicamente sbagliato e può essere fuorviante. - Lizardx
thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/... lo spiega abbastanza chiaramente, si noti la sezione: 4. Il percorso di esclusione è sempre relativo (al percorso di origine) - Lizardx


Quando si hanno più directory e / o file da escludere, creare un file di testo e utilizzare il file --exclude-from interruttore. Crea un file chiamato exclude_me.txt e in esso elenca le tue esclusioni. Esempio (/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Quindi il tuo rsync sarà simile a qualcosa:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Queste sono alcune informazioni sulle regole del filtro che possono aiutare:

  • /dir/ significa escludere la cartella radice /dir
  • /dir/* significa ottenere la cartella radice /dir ma non il contenuto
  • dir/ significa escludere qualsiasi cartella ovunque sia presente il nome dir/

  • Esempi esclusi: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf significa saltare i file che iniziano con cf all'interno di qualsiasi cartella entro /var/spool/lpd

Vedi anche il regole del filtro sezione sulla pagina man.


85
2018-05-19 15:13



È importante notare questo cartella rootsignifica il radice del trasferimento non la directory radice. - jamesdlin


Puoi anche escludere più percorsi all'interno di parentesi graffe:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

58
2017-09-18 08:59



funziona bene, solo non sotto, solo sotto bash, ho scoperto "nel modo più duro" - xor
Nessuno spazio dopo la virgola. Ho imparato che anche nel modo difficile - styl3r