Vraag Hoe verwijder ik rsync bestanden die zijn verwijderd uit de bronmap?


Ik heb onlangs een machine opgezet met Ubuntu Server om gameservers te hosten. Ik installeerde een back-upplug-in voor elke spelserver die regelmatig back-ups maakt van gamewereldbestanden in een bepaalde map op de machine. Ik heb ook een cron taak om elke back-up automatisch naar mijn Dropbox-map te kopiëren met rsync via de -a keuze.

Na een paar maanden bereikte mijn Dropbox-account de opslaglimiet en besefte ik dat ik niet zoveel back-ups kon bewaren, dus heb ik de back-upplugin voor de gameserver geconfigureerd om niet zoveel back-ups te bewaren en wachtte ik een paar dagen om te zien of het zou verwijder de oudere back-ups zoals gepland op wekelijkse basis. De back-up-plug-in deed uiteindelijk zijn werk en verwijderde de oudere back-ups, dus ik verwachtte de rsync cron-taak om vervolgens de oudere back-ups uit mijn Dropbox-map te verwijderen om overeen te komen met de bronmap, maar dat is niet gebeurd. Dus ik heb een paar vragen:

  • Standaard doet rsync enkel en alleen toevoegen bestanden naar de doelmap die zijn toegevoegd aan de bronmap en verandering bestanden die zijn veranderd in de bronmap maar NIET verwijderen bestanden die zijn verwijderd uit de bronmap?

  • Als dat het geval is, wat is de beste manier om te maken rsync doe dit? ik wil dat de doelmap perfect de bronmap weergeeft, en dat betekent het verwijderen van bestanden die uit de bron zijn verwijderd map.

Ik zie enkele opties die worden vermeld op de handleidingpagina voor rsync dat zou de slag kunnen slaan, maar omdat ik niet bekend ben met.


128
2018-06-03 03:53


oorsprong




antwoorden:


Als u bestanden in het doel wilt verwijderen, voegt u het toe --delete optie voor uw commando. Bijvoorbeeld:

rsync -avh source/ dest/ --delete

146
2017-08-26 07:14



Misschien gebruiken -aqr in plaats daarvan zou ook een idee zijn :) - TheBicentennialMan
Zorg ervoor dat de bron een map is. Gebruik makend van source/* dest/ zal niet werken. - Tom Saleeba
Ik vond die gebeurtenis met --delete of --delete-after het wordt niet verwijderd vanwege een aantal fouten: "IO-fout opgetreden - bestandsverwijdering overslaan". Om dit op te lossen, voeg je toe --ignore-errors optie en debug de fouten afzonderlijk - MHT
Werkt perfect! Hoewel het werkt, raad ik aan om ALTIJD te gebruiken -n, --dry-run optie, voordat u begint rsync, vooral als het gaat om opties zoals deze (--delete). Het zal elke mogelijke hoofdpijn vermijden :). - ivanleoncz
@MHT: geen antwoord lijkt compleet te zijn zonder uw opmerking. - Lonnie Best


De rsync commando zal geen bestand verwijderen terwijl je sommige van zijn opties gebruikt delete in die opdracht. Dus als een bestand of map wordt toegevoegd in de bron, wordt het gesynchroniseerd om te targeten zonder te worden verwijderd.

Ik raad u aan om te gebruiken rsync voor het maken van een back-up van bronbestanden en gebruik find ... rm voor verwijderingsbestanden voor de periode of grootte van bestanden:

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

Het bovenstaande codeblok, maak een back-up van de bron en verwijder vervolgens alle bestanden waarvan de laatst gewijzigde tijd meer dan 2 maanden is.

BIJWERKEN

Zoals ik vind dat de delete opties zijn alleen voor TARGET dat als sommige bestanden van de bron worden verwijderd, rsync --delete verwijder ze van TARGET. En de delete optie door after en before, zoals vermeld op de manpagina:

--delete-before         receiver deletes before transfer, not during

Betekent dat:

  1. rsync verwijdert het bestand van TARGET die uit SOURCE zijn verwijderd.
  2. rsync start met het synchroniseren van bestanden.

--delete-after receiver deletes after transfer, not during

Betekent dat:

  1. rsync start met het synchroniseren van bestanden.
  2. rsync verwijdert het bestand van TARGET die na het synchroniseren uit SOURCE is verwijderd.

NOTITIE: de --delete-{before/after} implementeren alleen in TARGET.


32
2018-06-03 04:13



Bedankt voor het antwoord!! Verwijst u naar een "delete" -optie voor rsync? Waarom kan ik niet gewoon de "delete" -optie voor rsync gebruiken? - user254251
@ user254251, Als u delete gebruikt, verwijdert de rsync-opdracht bestanden onmiddellijk. Maar in dit geval is er meer tijd voor eventuele fouten. - shgnInc
Als ik het goed begrijp, zeg je dat ik de verwijdertaak moet scheiden van de rsync-taak om fouten te voorkomen. Ik heb echter een vraag. De handmatige pagina voor rsync somt een aantal opties op die lijken te dienen om de verwijderingstaak te scheiden door deze voor of na de kopieertaak uit te voeren. Ik zie bijvoorbeeld twee opties genaamd --delete-before en --delete-after. Zou rsync met deze opties hetzelfde effect hebben als de methode die u beschreef? Ik heb de volledige beschrijving van elke optie op de handleiding gelezen, maar er staat informatie in de beschrijvingen die ik niet begrijp. - user254251
@ user254251, antwoord is bijgewerkt. Ik weet niet of er een manier is om bestanden van TARGET te verwijderen door tijdslimiet in rsync. - shgnInc
Bedankt! Dus denk je dat ik veilig ben voor fouten als ik simpelweg de optie --delete-before gebruik? Ik specificeer geen time-out, dus ik hoef me geen zorgen te maken als de rsync-verwijderingsfase de overdrachtsfase vertraagt. rsync wordt één keer per dag uitgevoerd en dat is voldoende tijd om de back-upbestanden vóór de volgende synchronisatie te synchroniseren, dus ik zou ook de tijdsynchronisatie niet moeten beperken. - user254251


Met deze opdracht worden incrementgegevens gekopieerd en gesynchroniseerd met de externe server.

  1. Het zal alleen incrementele gegevens kopiëren.
  2. Het wordt verwijderd als gegevens uit de bron worden verwijderd.
  3. Het zal opnieuw van de bron kopiëren als er gegevens op de bestemming worden verwijderd.
  4. in feite zal deze opdracht de beide omgevingen synchroon houden.

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

Voorbeeld:

rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup

5
2017-07-29 12:12



Ik denk dat -W maakt het niet alleen incrementele gegevens kopiëren maar altijd hele bestanden kopiëren. - Tulains Córdova
Ik heb deze fout gekregen door deze opdracht uit te voeren: rsync: Failed to exec --delete-before: No such file or directory (2) - Jeff Tian