MSync von Martin Schulze


Management summary

ACHTUNG! MSync erkennt Änderungen an Dateien ausschließlich am Dateidatum. Es vergleicht weder den Inhalt, noch die Dateigröße oder ähnliches.
Nur damit hier keine Mißverständnisse aufkommen...

MSync synchronisiert zwei Verzeichnisse inkl. aller enthaltenen Dateien und Unterverzeichnisse miteinander.
Besonderer Zusatznutzen im Vergleich zu anderen Programmen ist, daß MSync erkennt wenn Dateien gelöscht oder auf beiden Seiten gleichzeitig verändert wurden.

Es ist keine Installation notwendig. Nur .MSY-Dateien mit der MSync.exe öffnen lassen.

Um zwei Verzeichnisse zu synchronisieren, eine Textdatei mit den beiden kompletten Pfaden (auch UNC Netzwerkpfade oder {VolumeName} statt Laufwerksbuchstaben) in den ersten Zeilen erstellen und als .MSY speichern. Danach MSync starten und den Namen dieser Datei als Parameter übergeben, oder Windows' "Öffnen mit" verwenden.

Nach der Verzeichnisangabe kann für jede Seite einzeln eine Zeitdifferenz in Stunden angegeben werden.
TimeOffsetA:-1
TimeOffsetB:0.5
Die automatische Umstellung auf Sommer/Winterzeit mit NTFS-Laufwerken ändert die Dateidaten ALLER Dateien. Nach der Umstellung von Winter- auf Sommerzeit kompensiert beispielsweise ein Offset von -1 die Änderungen.

IgnoreDifference:0
Erwartet eine 100%ige Übereinstimmung der Dateidaten. Ansonsten wird die Datei als verändert betrachtet. Um den Fat 2 Sekunden Bug zu umgehen, kann hier eingestellt werden, wie viele Sekunden Differenz MSync noch als "gleich" ansieht.

In den nächsten Zeilen ist es möglich, mit Include: und Exclude: festzulegen, welche Dateien synchronisiert werden sollen. Bsp:
Include:*
Exclude:*.dat|*thumbs.db|\test\co*.txt
Dabei beachtet er auch Pfade, so daß thumbs.db nur für's Hauptverzeichnis gilt, während *thumbs.db auch thumbs.db Dateien in Unterverzeichnissen ausschließt.

Mit dem Parameter /a macht er alles ohne weitere Nachfrage automatisch. (Für mutige ;-)) Mit /q ohne Fehlermeldungen, mit /o überschreibt oder löscht er auch schreibgeschützte Dateien
(Für besonders mutige), /l:logfilename erstellt eine Logdatei mit der Zusammenfassung, /L:logfilename protokolliert jede Kleinigkeit. Zur Parameterübersicht.

Man kann beliebig viele .MSY-Dateien, egal wo, haben, verschieben, kopieren, Verknüpfungen erstellen usw.

Beispiel-MSY-Datei:
d:\daten
\\notebook\c\daten
TimeOffsetA:-1
Exclude:RECYCLER\*


Oder kürzer:

C:\daten
{MeinUSBstick}\daten

Das Konzept

Der Benutzer erstellt zunächst eine Textdatei, in der die Namen der beiden zu synchronisierenden Verzeichnisse in den ersten Zeilen stehen. Das Programm benutzt daraufhin diese Datei und gleicht die beiden angegebenen Verzeichnisse ab.  Beim ersten Vergleich werden natürlich weder gelöschte, noch auf beiden Seiten geänderte Dateien erkannt. Es werden jeweils die älteren Dateien mit den neueren Versionen überschrieben.

ACHTUNG! MSync erkennt Änderungen an Dateien ausschließlich am Dateidatum. Es vergleicht weder den Inhalt, noch die Dateigröße oder ähnliches. Nur damit hier keine Mißverständnisse aufkommen...

Nach der ersten Synchronisation werden zusätzlich alle notwendigen Informationen in der oben angegebenen (Text-)Einstellungsdatei gespeichert.
Bei weiteren Synchronisationen werden die beiden Verzeichnisse miteinander und mit dem Zustand nach der letzten Synchronisation verglichen. Dabei wird zunächst eine Aufgabenliste erstellt, in der man noch einzelne Aktionen aktivieren oder deaktivieren kann.
Nach einem Klick auf "Synchronisieren" werden alle aktivierten Aufgaben ausgeführt, die beiden Verzeichnisse noch einmal miteinander verglichen und es wird wieder eine Aufgabenliste erstellt. usw...
Es werden nur Dateien beachtet, die mindestens ein Kritierium unter Include: und keines der Kriterien unter Exclude: erfüllen. Standardmäßig werden alle Dateien synchronisiert (Include:*, Exclude:).

War eine Synchronisation erfolgreich, so daß auch nach erneutem Vergleich keine Unterschiede festgestellt wurden, so wird der "Synchronisieren"-Knopf zum "INI-Datei Optimieren"-Knopf.

Optimieren

Dabei wird die Reihenfolge der Dateien in der INI-Datei der Reihenfolge der Dateien auf der Festplatte angeglichen, was zu dramatischen Geschwindigkeitssteigerungen beim Vergleich führt (beispielsweise von 30 auf EINE Sekunde bei 3500 Dateien!).

Zur Bedienung

Ruft man das Programm ohne die erforderliche Einstellungsdatei auf, so bekommt man diese Kurzanleitung zu sehen.



Man muß also zunächst eine Textdatei erstellen, in der die ersten beiden Zeilen die beiden zu vergleichenden Pfade enthalten. Dabei müssen komplette Pfade angebeben werden und es können auch UNC Netzwerkpfade angegeben werden. Einziger Nachteil ist, daß der vorhandene Speicherplatz nur auf einem als Netzlaufwerk verbundenen ermittelt werden kann. Solange also beide Pfade mit einem Laufwerksbuchstaben beginnen, kann MSync (ab Version 0.93) bei zu wenig Speicherplatz warnen.
Seit Version 1.09 kann MSync ein Laufwerk auch anhand seines Namens (Label oder Volumename) erkennen. Dazu einfach statt des Laufwerksbuchstabens (C: oder D:) den gewünschten Namen in geschweiften Klammern angeben z.B. {meinUSBstick}. Die Suche beachtet Groß- und Kleinschreibung und sucht nicht nach CD-Laufwerken.

Nach der Verzeichnisangabe kann für jede Seite einzeln eine Zeitdifferenz in Stunden angegeben werden.
TimeOffsetA:-1
TimeOffsetB:0.5
Problem: Die automatische Umstellung auf Sommerzeit ist in Windows als Änderung der aktuellen Zeitzone realisiert. Auf FAT-Laufwerken wird das Dateidatum als lokale Zeit gespeichert. Hier ergeben sich dadurch keine Änderungen. Bei NTFS-Laufwerken allerdings wird das Dateidatum auf UTC also Greenwichzeit normiert gespeichert. Beim Abfragen des Dateidatums ermittelt Windows dann zunächst die aktuelle Zeitzone und errechnet daraus das Dateidatum.
Da nun die Umstellung auf Sommerzeit durch eine Änderung der Zeitzone realisiert wurde, ändern sich natürlich auch die Dateidaten von Dateien, die vor der Umstellung erstellt wurden um eine Stunde. DAS wiederum erkennt MSync.
Sofern keine Änderungen seit der letzten Synchronisation gemacht wurden, meldet er nur, daß sich alle Dateien auf beiden Seiten geändert haben und übernimmt bei der Synchronisation die Änderungen.
Bei einer Synchronisation von einem FAT-Laufwerk auf ein (Server?) NTFS-Laufwerk gibt es aber größere Probleme, da nur auf einer Seite die Zeit "verändert" wurde und MSync daraufhin die andere Seite komplett überschreiben möchte.
Lösung: Mit TimeOffsetA und -B kann auf jeder Seite eine bestimmte Zeit zu jedem von der Platte gelesenem Dateidatum addiert werden. Nach der Umstellung von Winter- auf Sommerzeit sind beispielsweise alle Dateien eine Stunde älter.  Ein

TimeOffsetA:-1
TimeOffsetB:-1
addiert nun auf beiden Seiten jeweils minus eine Stunde zum Dateidatum, so daß alle Dateien wieder eine Stunde jünger und für MSync wieder alles OK ist.
Tut mir leid, daß dies eine Handarbeitslösung ist, bei der man alle halbe Jahre die MSY-Datei mit einem Editor anfassen muß, aber ich wollte keine Klicki-Bunti-Windows-mein-Programm-erkennt-alles- meistens-alleine-und-fragt-den-Benutzer-nicht-Lösung bauen!

IgnoreDifference:0
Erwartet eine 100%ige Übereinstimmung der Dateidaten. Ansonsten wird die Datei als verändert betrachtet.
Problem:
FAT Laufwerke speichern das Dateidatum nicht so genau, wie NTFS-Laufwerke. Wenn eine Datei von einem NTFS-Laufwerk auf ein FAT-Laufwerk kopiert wird, wird das Dateidatum kommentarlos auf das nächstmögliche gerundet. DAS erkennt MSync natürlich.
Lösung:
IgnoreDifference:2
ignoriert Zeitdifferenzen von +/- 2 Sekunden. Das ist noch kein besonderes Sicherheitsrisiko, ignoriert aber die eigenmächtigen Datumsänderungen des Systems.

In den nächsten Zeilen ist es möglich, mit Include: und Exclude: festzulegen, welche Dateien synchronisiert werden sollen. Bsp:
Include:*
Exclude:*.dat|*thumbs.db|\test\co*.txt
Dabei beachtet er auch Pfade, so daß thumbs.db nur für's Hauptverzeichnis gilt, während *thumbs.db auch thumbs.db Dateien in Unterverzeichnissen ausschließt. Es werden nur Dateien synchronisiert, die mindestens ein Kritierium unter Include: und keines der Kriterien unter Exclude: erfüllen. Standardmäßig werden alle Dateien synchronisiert (Include:*, Exclude:).


Diese Textdatei sollte die Endung .MSY bekommen, es kann aber auch jede andere Endung gewählt werden. Diese Datei darf dann liegen, wo sie möchte. Sie sollte nicht in und muß nicht in der Nähe der zu synchronisierenden Verzeichnisse liegen. Sie darf auch zwischen den Synchronisationen beliebig verschoben und kopiert werden. Es können beliebig viele .MSY-Dateien auf einem Rechner koexistieren.

Installation

Ziel des einzigen Schrittes zur Installation von MSync ist es, daß Windows die .MSY-Datei immer mit MSync öffnet, genauer gesagt: MSync startet mit dem Dateinamen der .MSY-Datei als Parameter. Das zu erreichen, gibt es natürlich zahllose Möglichkeiten. Das einfachste ist wohl, die .MSY-Datei Doppelzuklicken. Daraufhin sollte Windows fragen, mit welchem Programm es diese Datei öffnen soll. An dieser Stelle muß man Windows nur noch die MSync.exe zeigen und schon öffnet Windows die Datei mit MSync.
Jetzt wird sofort der erste Vergleich durchgeführt und die Aufgabenliste angezeigt.
Bei weiteren Synchronisationen muß man normalerweise nur noch die entsprechende .MSY-Datei doppelklicken, wenn die Aufgabenliste erstellt wurde diese mit "Synchronisieren" absegnen und damit den Abgleich starten.
Die Abbildung zeigt ein Beispiel für eine abwechslungsreiche Aufgabenliste.



Sind beide Verzeichnisse noch gleich, so bleibt natürlich auch die Aufgabenliste leer. Außerdem erhält man die Meldung, daß eine Synchronisation nicht erforderlich ist.



Optionen

ACHTUNG! MSync erkennt Änderungen an Dateien ausschließlich am Dateidatum. Es vergleicht weder den Inhalt, noch die Dateigröße oder ähnliches. Nur damit hier keine Mißverständnisse aufkommen...

Bei der Synchronisation von Verzeichnissen muß häufig entschieden werden, welche Datei mit welcher anderen Datei überschrieben werden soll. In den meisten Fällen kann MSync selbständig entscheiden, welche Datei die aktuelle ist. Wenn seit der letzten Synchronisation beispielsweise nur eine der beiden Dateien geändert wurde, ist es sehr wahrscheinlich, daß die geänderte Datei die von jetzt an aktuelle Version ist, und die nicht veränderte Datei überschrieben werden soll.
Wurden beide Dateien allerdings seit der letzten Sychronisation geändert, kann MSync nur anhand des Änderungsdatums entscheiden, welche Datei neuer ist und überschreibt dabei möglicherweise wichtige Daten in der früher geänderten Datei. Aus diesem Grund wird ein solcher Konflikt (Voreinstellung) nicht automatisch aufgelöst sondern dem Benutzer präsentiert. Im entsprechenden Kontextmenü kann gewählt werden, welche Datei überschrieben werden soll.

Umdrehen

Im unten dargestellten Optionen-Dialog kann man festlegen, welche Aufgaben standardmäßig aktiviert sind. Sofern man das Programm nicht rein automatisch ablaufen läßt (mit Parameter /a), hat man in der Aufgabenliste allerdings noch die Möglichkeit Aufgaben eigenhändig zu de/aktivieren. Diese Optionen werden für jede Einstellungsdatei (.MSY) einzeln gespeichert




Die letzte Option sorgt dafür, daß MSync leere Verzechnisse löscht, wenn sie nur in einem der Pfade bestehen. Normalerweise kommt soetwas nur vor, wenn in einem Pfad ein komplettes Verzeichnis gelöscht wird. Dann besteht nach der Synchronisation, bei der die Dateien ja auch im anderen Pfad gelöscht werden, noch das soeben geleerte Verzeichnis. Dieses kann MSync dann automatisch löschen.
Einzige Problematik: Wenn man ein Verzeichnis in nur einem Pfad erstellt und sich darin keine Dateien befinden, so wird auch dieses leere Verzeichnis gelöscht. Passiert aber selten ;-)

Parameter

ACHTUNG! MSync erkennt Änderungen an Dateien ausschließlich am Dateidatum. Es vergleicht weder den Inhalt, noch die Dateigröße oder ähnliches. Nur damit hier keine Mißverständnisse aufkommen...

MSync kann nach guter alter Kommandozeilen-Tradition mit verschiedenen Parametern aufgerufen werden:

msync [/a] [/l:LogDateiName] [/L:LogDateiName] Dateiname

Dateiname     Name der (Text-) Eingabe Datei bzw. MSY-Datei
/a     Führt die Synchronisation automatisch und ohne Nachfrage durch. Es ist keine Interaktion mit dem Nutzer vorgesehen.
/o     Auch schreibgeschützte Dateien löschen oder überschreiben.
/q     Quiet - Falls ein Fehler beim Kopieren einer Datei auftritt, versucht MSync drei mal die Datei zu kopieren und übergeht den Fehler dann ohne Meldung. Die Datei wird für eine spätere Synchronisation vorgesehen.
/l:LogDateiName     Schreibt eine Zusammenfassung der durchgeführten Aktionen in die Datei LogFileName
/L:LogDateiName     Schreibt eine komplette Aufstellung der durchgeführten Aktionen in die Datei LogFileName

Tips

Bei einer synchronisation mit einem Windows Rechner als Server kann es vorkommen, daß das Durchsuchen der Verzeichnisse auf dem Server deutlich länger dauert als lokal. Das bessert sich auch beim zweiten Durchsuchen nicht.
Das Problem entsteht durch eine "Eigenschaft" von Windows. Eine Beschreibung inklusive der Registry Einträge, die das Problem bei mir gelöst haben, ist bei Microsoft unter der Artikelnummer 177266 zu finden.

Haftungssausschluß:

Das Herunterladen und die Verwendung der Progamme erfolgt auf eigene Gefahr! Wir übernehmen keine Gewährleistung oder Haftung für etwaige Schäden, Folgeschäden oder Ausfälle, die entstehen können. Die Nutzer verzichten auf jedwede Ansprüche gegen uns, die sich aus diesen Vorgängen ergeben können. Wir übernehmen keine Haftung oder Gewährleistung für Schäden, die entstehen, weil Software, Beschreibungen, Links oder sonstige Inhalte fehlerhaft sind. Wir übernehmen keine Haftung für Schäden, die durch Irrtümer enstehen. Wir haften nicht für Schäden, die aus dem Download oder der Benutzung der aufgeführten Software entstehen können. Wir haften nicht für Schäden, die aus dem Mißbrauch der übermittelten Daten und Programme entstehen, ebenso wenig für Schäden, die durch den Besuch dieser Seiten entstehen können. UND wir sind nicht schuld!