Vraag Hoe meerdere mappen uit te sluiten met rsync?


Ik probeer een back-up te maken van mijn thuismap met rsync en ik wil sommige van de mappen uitsluiten die rommel bevatten. Ik wil dit specifiek uitsluiten /home/ben/.ccache en /home/ben/build. Helaas was de documentatie voor rsync informatieoverload en beantwoordde ik mijn vraag niet. Dit is wat ik heb geprobeerd:

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

Wat is de juiste manier om dit te doen?


136
2017-07-15 23:53


oorsprong


Wilde alleen maar zeggen dat de vlag a impliceert r nu al :) -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) - Populus


antwoorden:


OK Ik voel me echt dom. Voordat ik deze vraag zelfs plaatste, liet mijn vriend me zien hoe ik het moest doen en het is heel eenvoudig. Om meerdere mappen uit te sluiten, gebruikt u gewoon meerdere --exclude=path schakelaars. Dus mijn commando hierboven correct geschreven is als volgt:

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

178
2017-07-15 23:53



Een absoluut pad deed niet werk voor mij (de opgegeven map was stil niet uitgesloten), terwijl een pad ten opzichte van de brondirectory correct werkte. Misschien mis ik iets, maar ik zou voorzichtig zijn met de bewering van @FreeSoftwareServers dat absolute paden altijd werken. - Soren Bjornstad
FWIW, een beetje creatief diff gebruik kan nuttig zijn. Stel dat u het uitsluiten van vlaggen van uitvoeren aan te passen aan te passen nas_backup.sh. Neem aan dat ook gebruiken --dry-run. rennen: . nas_backup.sh > dryrun.5.txt, pas uitsluiten aan en voer dan uit . nas_backup.sh > dryrun.6.txt  dan diff diff dryrun.5.txt dryrun.6.txt | less   dit zal je laten zien wat tussen die 2 runs is toegevoegd / verwijderd. - JL Peyret
Ter info: de optie -a omvat -r zo -ar is overbodig. - David
In tegenstelling tot wat FreeSoftwareServers gelooft, is het uitsluitingspad relatief ten opzichte van het bronpad, NIET /. Dus die opmerking is categorisch onjuist en zal leiden tot mislukkingen als je die volgt. De beste strategie is om de leidende / in uw uitsluitingen achterwege te laten om dit soort mentale fouten te voorkomen. Als source is, / home / me en als je exclude = '/ mydir /' sluit dit de map mydir uit in / home / mij, dat wil zeggen, het sluit / home / me / mydir NOT / mydir / at / uit. Het is jammer dat ik die opmerking niet kan down-downen of bewerken, omdat het technisch fout is en misleidend zal zijn. - Lizardx
thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/... legt dit heel duidelijk uit, noteer het gedeelte: 4. Uitsluitingspad is altijd relatief (naar het bronpad) - Lizardx


Wanneer u meerdere mappen en / of bestanden wilt uitsluiten, maakt u een tekstbestand en gebruikt u de --exclude-from schakelaar. Maak een bestand met de naam exclude_me.txt en vermeld daarin uw uitsluitingen. Voorbeeld (/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Dan zou je rsync er ongeveer zo uitzien:

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

Dit is wat informatie over filterregels die kunnen helpen:

  • /dir/ betekent dat de hoofdmap wordt uitgesloten /dir
  • /dir/* betekent krijg de hoofdmap /dir maar niet de inhoud
  • dir/ betekent dat elke map overal waar de naam zich bevindt wordt uitgesloten dir/

  • Voorbeelden uitgesloten: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf betekent skip-bestanden die beginnen met cf binnen elke map binnen /var/spool/lpd

Zie ook de filter regels sectie op de man-pagina.


85
2018-05-19 15:13



Het is belangrijk om dat op te merken hoofdmapbetekent het root van de overdracht niet de hoofdmap. - jamesdlin


U kunt ook meerdere paden uitsluiten tussen accolades:

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

58
2017-09-18 08:59



dit werkt mooi, alleen niet onder sh, alleen onder bash, ik kwam erachter "de harde manier" - xor
Geen spatie achter de komma. Dat leerde ook op de harde manier - styl3r