Wie mache ich rsync Dateien löschen, die aus dem Quellordner gelöscht wurden?

124

Ich habe kürzlich eine Maschine mit Ubuntu Server eingerichtet, um Spielserver zu hosten. Ich habe ein Backup-Plugin für jeden Gameserver installiert, das häufige Backups von Spielweltdateien in einem bestimmten Ordner auf dem Computer erstellt. Ich habe auch einen cron -Task erstellt, um diese Backups jeden Abend automatisch in meinen Dropbox-Ordner zu kopieren, indem ich rsync mit der Option -a verwende.

Nach ein paar Monaten erreichte mein Dropbox-Konto sein Speicherlimit und ich erkannte, dass ich nicht in der Lage sein würde, so viele Backups zu speichern. Deshalb habe ich das Backup-Plugin so konfiguriert, dass nicht so viele Backups gespeichert wurden wenn es die älteren Backups so löschen würde, wie es wöchentlich geplant ist. Die Backup-Plugin hat schließlich seinen Job und löschte die älteren Backups, so dass ich das rsync Crontask erwartet, um anschließend die älteren Backups von meinen Dropbox-Ordnern löschen Sie den Quellordner übereinstimmen, aber es hat nicht getan. Ich habe also ein paar Fragen:

  • Standardmäßig fügt rsync only Dateien zum Zielordner hinzu Diese wurden zum Quellordner hinzugefügt und ändern -Dateien wurden im Quellordner geändert, aber Dateien NICHT löschen die aus dem Quellordner gelöscht wurden?

  • Wenn das der Fall ist, wie kann rsync das am besten machen? ich Wenn der Zielordner den Quellordner perfekt wiedergeben soll, und das bedeutet Löschen von Dateien, die aus der Quelle gelöscht wurden Ordner.

Ich sehe einige Optionen, die in der Manualpage für rsync aufgelistet sind, die den Trick machen könnten, aber da ich nicht damit vertraut bin.

    
user254251 03.06.2014, 05:53
quelle

3 Antworten

141

Um Dateien im Ziel zu löschen, fügen Sie Ihrem Befehl die Option --delete hinzu. Zum Beispiel:

rsync -avh source/ dest/ --delete
    
GarethD 26.08.2015 09:14
quelle
32

Der Befehl rsync löscht keine Datei, während Sie in diesem Befehl einige seiner Optionen delete verwenden. Wenn also eine Datei oder ein Ordner in der Quelle hinzugefügt wird, wird sie ohne Löschen synchronisiert.

Ich empfehle Ihnen, rsync für die Sicherung von Quelldateien zu verwenden und find ... rm für Löschdateien für den Zeitraum oder die Größe von Dateien zu verwenden:

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

Der obige Codeblock, machen Sie eine Sicherung von der Quelle und löschen Sie dann alle Dateien, die die letzte modifizierte Zeit mehr als 2 Monate sind.

AKTUALISIEREN

Ich finde, dass die Optionen delete nur für TARGET sind, wenn einige Dateien aus der Quelle entfernt werden, rsync --delete sie aus TARGET entfernen. Und die Option delete von after und before , wie in der Manpage erwähnt:

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

Bedeutet das:

  1. rsync löscht die Datei aus TARGET, die aus SOURCE entfernt wird.
  2. rsync startet die Synchronisierung von Dateien.

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

Bedeutet das:

  1. rsync startet die Synchronisierung von Dateien.
  2. rsync löscht die Datei aus TARGET, die nach der Synchronisierung aus SOURCE entfernt wird.

HINWEIS : Das --delete-{before/after} wird nur in TARGET implementiert.

    
shgnInc 03.06.2014 06:13
quelle
5

Dieser Befehl kopiert Inkrementdaten und hält sie synchron mit dem Remote-Server.

  1. Es werden nur inkrementelle Daten kopiert.
  2. Es wird gelöscht, wenn Daten aus der Quelle gelöscht werden.
  3. Es wird erneut von der Quelle kopiert, wenn Daten am Zielort gelöscht wurden.
  4. Im Grunde wird dieser Befehl beide Umgebungen synchron halten.

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

Beispiel:

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
    
Ganesh Ghube 29.07.2015 14:12
quelle

Tags und Links