Vraag Hoe bestanden uit te sluiten in rsync?


Ik gebruik ubuntu-server 12.04, nu wil ik een aantal bestanden back-uppen met rsync, hier is een poging:

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

Zoals je kunt zien, wil ik een back-up maken van alle bestanden in de map $ HOME / Documents naar map $ HOME / Backups / TEST, maar uitsluiten bestanden in map een ander en temp. Maar ik faalde, rsync kopieerde nog steeds de bestanden in beide uitgesloten mappen:

ls $HOME/Backups/TEST/another
test

test


12
2018-05-06 06:25


oorsprong




antwoorden:


Er zijn verschillende problemen met uw rsync-opdracht (zie ook manpage voor rsync voor gedetailleerde uitleg over filterregels).

  • we hebben een --exclude beveel elk voor een bepaald patroon.
  • gegeven paden moeten relatief zijn ten opzichte van het bronpad (geen absolute paden).
  • opties moeten worden gegeven voordat we de bron en bestemming vermelden.

Voor uw voorbeeld werkt de volgende syntaxis:

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

Merk op dat als een exlude-patroon eindigt met / het verwijst naar een map. Als u beide weglaat, worden bestanden en mappen met die naam uitgesloten. Vervang het door een wildcard * om alle bestanden of mappen met die tekenreeks uit te sluiten in hun naam.


11
2018-05-06 06:55



Dit is niet helemaal correct. Ik weet niet zeker hoe het werkt, maar door experimenten, --exclude=/foo zal de map uitsluiten foo rechtstreeks in de bron, maar --exclude=foo zal alle mappen met de naam foo uitsluiten, zelfs in submappen. - Sparhawk


Misschien vind je het gemakkelijker om toe te voegen .rsync-filter bestanden in uw bronmappen en gebruik de -F keuze.

Van de manpagina:

-F: De optie -F is een afkorting [...] voor deze regel:

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

Dit vertelt rsync om te zoeken naar per-directory .rsync-filterbestanden   die door de hiërarchie zijn gestrooid en hun gebruiken   regels om de bestanden in de overdracht te filteren.

Bijvoorbeeld: in $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

In plaats van -, je kunt ook het hele woord schrijven exclude.

Nu kan je

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/

8
2018-04-25 13:16