Sync, geschrieben in C, ist ein kleines Programm zur Synchronisation von Dateien mehrerer Computer mit einem zentralen Datenserver.
Sync synchronisiert Dateien zwischen Orten (Pfaden), überschreibt also ältere Versionen von Dateien am einen Ort mit neueren Versionen eines anderen Ortes.
Das Programm entstand aus der Notwendigkeit, Initialisierungs-Dateien eines Programmes, das auf mehreren Rechnern läuft, aktuell zu halten, obwohl die Dateien oft nicht auf einem Server liegen können und die hauseigenen Synchronisierungsfunktionen des Betriebssystems von Version zu Version differieren. PC 1 soll sich beim Start die neuesten Versionen bestimmter Dateien von einem Server oder einer zentralen Festplatte ziehen und ggf. nach Änderung vor dem Herunterfahren wieder zurückspielen. Später startet PC 2 mit dem selben Vorgehen. Somit sollten alle PCs im Idealfall über die jeweils neuesten Daten verfügen.
Durch eine Syncdatei erfährt das Programm, welche Dateien zu aktualisieren sind. Diese Konfigurationsdatei enthält die Orte und Namen der zu synchronisierenden Dateien. Wird dem Programm keine Syncdatei auf der Kommandozeile mitgegeben, wird standardmäßig sync.cfg geladen. Um zu entscheiden, ob eine Dateienpaar zu synchronisieren ist, fragt das Programm die Zeit der letzten Änderung ab.
Benötigt wird das Betriebssystem Windows . Getestet wurden die Versionen XP-10.
Weder Installation noch Deinstallation sind notwendig. Das Programm kann in ein beliebiges Verzeichnis kopiert werden.
Das Programm kann über Kommandozeile oder GUI aufgerufen werden. Ohne angegebenen Parameter sucht das Programm im aktuellen Verzeichnis nach der Syncdatei sync.cfg. Der Parameter /? druckt eine Hilfe:
Sync - Datei-Synchronisierung V 1.0.0.32. Syntax: sync [/Optionen] Optionen (Standardwerte): /? Diese Hilfe /d<nn> Tolerierte Zeitdifferenz in Sekunden, ohne eine Synchronisation auszuloesen /l Aktionen nur auflisten, nicht ausfuehren /y Vor Ueberschreiben von Dateien fragen /g Aktionen in Logdatei sync.log schreiben /c<dateiname> Konfigurationsname (sync.cfg) /o<dateiname> Logname (sync.log) Siehe sync.txt fuer weitere Hilfe.
Der Parameter /l ist nützlich zum Testen, welche Dateien überschrieben würden. Er führt mit folgender Syncdatei:
; Mehrcomputerversion [PC01] | ||
c:\windows\system32\drivers\etc\ | i:\tim\bck\ | |
hosts | ||
c:\programme\etc\ | ||
dr.txt | ||
lst.htm | ||
c:\programme\privoxy\ | i:\tim\bck\proxies\ | |
usr.act | ||
[PC-02] | ||
c:\users\tim\appdata\privoxy\ | i:\tim\bck\proxies\ | |
usr.act | ||
... |
auf PC01 z.B. zu folgender Ausgabe:
### Synchronisationstest vom 31.05.2016 15:50:43: ; Mehrcomputerversion *** Sektion PC01 | ||
c:\windows\system32\drivers\etc\: | i:\tim\bck\: | |
hosts (4,04 KiB, 05.05.2016 18:20:03) | = | hosts (4,04 KiB, 05.05.2016 18:20:03) |
c:\programme\etc\: | i:\tim\bck\: | |
dr.txt (3,74 KiB, 30.03.2016 20:30:56) | = | dr.txt (3,74 KiB, 30.03.2016 20:30:56) |
lst.htm (4,1 KiB, 12.03.2016 11:53:13) | = | lst.htm (4,1 KiB, 12.03.2016 11:53:13) |
c:\programme\privoxy\: | i:\tim\bck\proxies\: | |
usr.act (1,1 KiB, 25.05.2016 11:42:00) | > | usr.act (1,2 KiB, 05.05.2016 18:22:53) |
Synchronisationstest beendet. 0 Datei(en) aktualisiert, 0 Fehler. |
Eine Syncdatei wird zeilenweise abgearbeitet. Leerzeilen und mit '#' eingeleitete Kommentarzeilen werden ignoriert. Sektionszeilen geben Sync an, für welchen Computer die nachfolgenden Zeilen gelten (z.B. [PC01]). Sync fragt beim Start den Namen des Computers ab, unter dem es läuft. Somit kann eine Syncdatei für mehrere Computer verwendet werden, auf denen sich ja zumeist die Pfade unterscheiden.
Verzeichniszeilen benennen die Verzeichnisse, Dateizeilen die Dateinamen. Jede dieser Zeilen besteht aus 2 Spalten, die durch Tabulator getrennt sind:
Links Ort 1, rechts Ort 2.
Die beispielhafte Syncdatei:
[PC01] # Ort 1 Ort 2 # ----------------------- c:\dat\ d:\backup\ 01.txt 01.txt 02.txt 02.txt c:\dat\ e:\backup2\ 03.txt 03.txt
mit zwei Verzeichnis- und drei Dateizeilen führt zu folgender Synchronisation:
c:\dat\01.txt <--> d:\backup\01.txt c:\dat\02.txt <--> d:\backup\02.txt c:\dat\03.txt <--> e:\backup2\03.txt
Es existiert eine Kurznotation:
Somit kann obiges Beispiel auch so geschrieben werden:
[PC01] # Ort 1 Ort 2 # ----------------------- c:\dat\ d:\backup\ 01.txt 02.txt e:\backup2\ 03.txt
Anders formuliert: Verzeichnisnamen vererben sich spaltenweise hinunter, Dateinamen zeilenweise von links nach rechts.
Besteht an Ort 2 (rechts) noch keine entsprechende Datei, wird sie neu angelegt. An Ort 1 (links) wird hingegen nie eine Datei neu angelegt. Angegebene Verzeichnisse müssen bei der Synchronisation existieren, sie werden generell nicht angelegt.
Ein Löschen von Dateien oder Verzeichnissen erfolgt niemals. Platzhalter (z.B. *.txt, b?.log) können für Dateinamen in Ort 1 verwendet werden, wobei zu beachten ist, daß die Suche nach passenden Dateinamen nur an Ort 1 erfolgt, nicht an Ort 2.
Die beispielhafte Syncdatei:
c:\dat\ d:\backup\ *.log
mit 01.log und 02.log unter c:\dat\ und 01.log und 03.log unter d:\backup\ führt somit nur zwei Synchronisationen aus:
c:\dat\01.log <--> d:\backup\01.log c:\dat\02.log <--> d:\backup\02.log (Neuanlage)
d:\backup\03.log hingegen wird ignoriert und führt nicht zur Anlage von c:\dat\03.log; die Notation ist also nicht spiegelsymmetrisch!
Es können Dateien mit unterschiedlichen Dateinamen synchronisiert werden, wie z.B. in:
c:\dat\ d:\backup\ typen in c.txt CTYPES.TXT
Dateinamen mit Leerzeichen können, aber müssen nicht in Anführungszeichen gesetzt werden: Sync überliest Anführungszeichen.
Wurzelverzeichnisnamen müssen mit einem Backslash ('\') abgeschlossen werden.
Wer Sync selbst kompilieren will, benötigt die Quellen:
sync-src.zip [10 KB]
Wer Sync nicht kompilieren will, lädt das Kompilat als ZIP-Archiv:
sync32.zip [11 KB, 32 bit, MD5]
sync64.zip [13 KB, 64 bit, MD5]
Empfehlenswert ist anschließend die Prüfung auf Virusfreiheit und Authentizität.