it-swarm.com.de

So synchronisieren Sie nur neue Dateien

Ich versuche, rsync so einzurichten, dass mein Hauptwebserver mit dem Remote-Server synchronisiert wird, indem neu erzeugte Dateien zu letzteren hinzugefügt werden.

Hier ist der Befehl, den ich benutze:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" [email protected]:/foo/bar /foo/bar

Es scheint jedoch, dass der Webserver trotz des Flags '--update' tatsächlich alle Dateien überträgt. Ich habe verschiedene Flaggenkombinationen ausprobiert (z. B. '-a' weglassen und stattdessen '-uv' verwenden), aber keine hat geholfen. Wie kann ich den Befehl rsync so ändern, dass nur neu hinzugefügte Dateien gesendet werden?

164
supermario

Von man rsync:

--ignore-existing       skip updating files that exist on receiver

--update macht etwas anderes, weshalb Sie wahrscheinlich unerwartete Ergebnisse erhalten (siehe man rsync):

Dies zwingt rsync, alle Dateien zu überspringen, die auf dem Ziel vorhanden sind nd eine geänderte Zeit haben, die neuer als die Quelldatei ist. (Wenn eine vorhandene Zieldatei eine Änderungszeit hat, die der der Quelldatei entspricht, wird sie aktualisiert, wenn die Größen unterschiedlich sind.)

210
Chris Down

In meinem Fall hatte ich ähnliche Probleme, da alle Dateien anstelle der geänderten/neuen übertragen wurden. Ich habe dies mit den Parametern -t (Anstatt von -a), und -P (gleichwertig --partial --progress):

rsync -h -v -r -P -t QuelleZiel

Dadurch werden nur neue und bereits vorhandene, aber geänderte Dateien übertragen: -a macht zu viel, wie die Synchronisierung von Benutzer- und Gruppen-IDs, was in meinem Fall nicht funktionieren kann, da ich auf meinen Quell- und Zielsystemen unterschiedliche Benutzer und Gruppen habe.

Die Parameter im Detail:

  • -h: vom Menschen lesbare Zahlen
  • -v: ausführlich
  • -r: Rekurs in Verzeichnisse
  • -P: --partial (teilweise übertragene Dateien behalten) +
    --progress (Fortschritt während der Übertragung anzeigen)
  • -t: Änderungszeiten beibehalten
43
t0r0X

Aus meiner Erfahrung mit rsync ist das Kopieren einer 1-TB-Partition zu groß, um effizient zu sein. Es dauert ewig, bis rsync verarbeitet ist. Führen Sie dies stattdessen nach Unterverzeichnissen durch. Führen Sie also rsync für jedes Hauptunterverzeichnis aus. Es geht viel schneller, wenn es nicht Zehntausende von Dateien jonglieren muss.

2