Sync Script für 7-zip

Posted: 25th September 2011 by markus in Allgemein
Tags: ,

Situation: Ein Verzeichnis C:\workspace auf PC A muss mit dem Verzeichnis D:\workspace auf PC B synchronisiert werden. Da die beiden Computer nicht miteinander vernetzt sind, wird ein USB Stick benutzt, um die Daten von PC A zu PC B zu transportieren. Bei den Verzeichnissen handelt es sich um den Workspace von Eclipse mit einem größeren Java Projekt, d.h. es sind viele kleine Dateien. Es wurden mehrere Lösungen getestet

  • Windows Explorer
  • FreeFileSync
  • Sync Script für 7-zip

Das kopieren über den Windows Explorer scheidet gleich aus, da jedesmal alle Dateien auf den USB Stick kopiert werden müssen (egal ob geändert oder nicht), was sehr lange dauert. Beim kopieren von USB Stick auf PC B muss vorher das Ziel Verzeichnis komplett gelöscht werden, da sonst Dateien, die auf PC A gelöscht wurden auf PC B bestehen bleiben. Beim Kopieren werden keine Dateien gelöscht. Das gleiche Problem tritt auch bei FreeFileSync auf. Lediglich 7-zip hat hierfür eine Lösung. Beim update des Archivs auf dem USB Stick stellt 7-zip fest, dass auf PC A Dateien gelöscht wurden und vermerkt sich diese Dateien und Verzeichnise im Archiv. Wird dieses Archiv auf PC B entpackt, werden diese Löschanweisungen ausgeführt und das Verzeichnis auf PC B entspricht exakt dem Zustand von PC A.

Hier das Skript (PC A -> USB Stick) dazu. Es muss einfach in einer Datei gespeichert und angepasst werden.

@ECHO OFF
set ZIP_PROG=“c:\Programme\7-Zip\7z.exe“
set SOURCE=“D:\temp\test“
set TARGET=“F:\temp“
REM extension should be .7z
set FILENAME=“test.7z“

REM -up3q3 means create anti items for all not matched and deleted files, so files will be deleted on PC B
REM -xr!.svn means ignore all .svn files and folders recursive in all folders
REM -mx=1 sets the compression to a minimal mode
REM -ms=off the solid mode must be turned off otherwise the archive couldn’t be updated
%ZIP_PROG% u -t7z %TARGET%\%FILENAME% %SOURCE%\ -up3q3r2x2y2z1w2 -xr!.svn -mx=1 -ms=off

REM only to see the messages
pause