Sven Rautenberg: Verzeichnise synchronisieren...

Beitrag lesen

Moin!

Meine Frage...
Wie kann ich ein Verzeichnis mit Unterverzeichnissen, dass auf einem Windows Rechner ist, via FTP mit einem Verzeichnis auf dem Webserver (Linux) synchronisieren.

Anhand welcher Merkmale willst du feststellen, ob eine Datei synchronisiert werden muß? Diese Aufgabe ist keinesfalls trivial!

Nur mal so zur grundsätzlichen Überlegung: Wenn du echt synchronisieren meinst, dann bedeutet das, sowohl lokal als auch remote haben sich Dateien geändert und sollen nun in beiden Richtungen ausgetauscht werden.

Dabei treten folgende Problemfälle auf:

1. Es hat sich bei beiden Dateien nichts geändert. Alle Dateiattribute (Größe, Erstelldatum, Änderungsdatum, etc.) sind gleichgeblieben.
2. Die lokale Datei hat sich geändert.
3. Die entfernte Datei hat sich geändert.
4. Beide Dateien haben sich geändert. Das nahezu unlösbare Problem hierbei ist: Wie soll man die Änderungen in der einen Datei in die andere hineinbringen, ohne die Änderungen dort zu überschreiben?

5. Eine Datei ist gelöscht worden.
6. Eine Datei ist neu hinzugefügt worden.
Das Problem hierbei: Wie erkennt man diese beiden Fälle? Wenn eine Datei nur auf einer Seite vorhanden ist: Ist das fehlende Gegenstück gelöscht worden, oder ist die nur einmal vorhandene Datei neu hinzugekommen?

Ich bin sicher, dass es noch weitere Spezialfälle gibt, die mir spontan nicht einfallen.

Alle diese Problematiken haben gemeinsam, dass man im Prinzip ohne das Anlegen einer entsprechenden Transfer- und Abgleichsdatenbank nicht auskommen kann. Wenn beim Abgleich beim Fall 5/6 die Datei in der Datenbank auf beiden Systemen schon mal registriert war, wurde sie wohl offenbar gelöscht. Wenn sie bislang unbekannt war, wird sie wohl neu angelegt worden sein. Und woran erkennt man, dass eine Datei geändert wurde? Die Gleichheit beider Dateien kann man einigermaßen zuverlässig anhand der Dateigröße und des Datums herausbekommen - die Methode versagt allerdings auch gerne mal, wenn das Datum auf beiden Systemen nicht synchron läuft, und diese (eigentlich überall vorhandene) Asynchronität auf das Dateidatum durchschlägt. Soll heißen: Wenn du um 13:22 eine Datei per FTP auf den Server packst, dessen Uhr erst 12:45 zeigt, und der FTP-Transfer sendet keine Uhrzeit mit, mit dem der Server die Datei anlegt, dann hast du trotz identischer Dateien zwei unterschiedliche Daten, die in der Folge alle Synchronisierungsversuche unmöglich werden lassen.

Und allein auf der Dateigröße basierend kann man auch nicht synchronisieren. Stell dir vor, es würde ein "Teppfuhler" in "Tippfehler" berichtigt werden. Die Dateigröße ändert das nicht - aber der Dateiinhalt ändert sich sehr wohl.

Du mußt also im Prinzip den Dateiinhalt beider Dateiversionen vergleichen. Es erscheint empfehlenswert, dafür beispielsweise eine MD5-Checksumme zu erstellen. Allerdings: Nur mit FTP kommst du damit nicht unbedingt weit, weil du dann die gesamten Dateien herunterladen und durch MD5 schleusen mußt. Spart also keine Bandbreite ein.

Ich hätte selbst schon sehr gerne solch ein Tool gehabt. Bislang hat dagegen eigentlich immer nur geholfen, die Datenströme eindeutig nur in eine Richtung fließen zu lassen: HTML-Dateien von local nach remote, und Logfiles von remote nach local. Damit erschlägt man erstmal einiges.

Und für komplexere Projekte, an denen mehrere Leute parallel arbeiten, empfiehlt sich der Einsatz einer Versionierungssoftware wie beispielsweise CVS. Damit werden Änderungen an Dateien protokolliert und lassen sich bei Bedarf durch Aufrufen einer älteren Version wieder rückgängig machen.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)