Ordner Synchronisation

  • Hi,

    wollte hier mal ein Programm von mir vorstellen, was ich vor nicht allzu langer Zeit geschrieben habe.
    Es heisst:

    Ordner Synchronisation (Version 1.2 Beta)

    Kurz gesagt wozu es dient:
    Es synchronisiert zwei Ordner ( Zielordner mit Quellordner, wobei Quellordner der Ordner auf dem neusten Stand sein soll ) unter angegebenen Optionen,
    die da wären:
    Synchronisiere neue Dateien (kopiere neue Quelldatei nach Zielordner)
    Synchronisiere veränderte Dateien (ersetze Zieldatei mit Quelldatei wenn unterschiedlich)
    Synchronisiere gelöschte Dateien (lösche Zieldatei wenn Quelldatei gelöscht wurde)

    Er Synchronisiert anhand der Größe zweier Dateien oder dem Datum.

    Es wird vor dem eigentlichen Vorgang eine Liste mit den Aktionen erstellt, welche man dann bearbeiten kann.
    Es ist auch möglich, Synchronisationsshortcuts zu erstellen, um mit einem Klick zu synchroniseren.
    Was praktisch ist: Man kann auch mit Netzwerkpfaden und natürlich USB-STicks oder sonst etwas synchronisieren.

    Für eine ausführlichere Erläuterung im Programm unter "Hilfe" schauen oder hier lesen:

    Spoiler anzeigen

    Ordner Synchronisation Hilfe 1.2 Beta


    1.0 Ordnertypen

    1.1 Was ist der Zielordner?
    Der Zielordner ist der Ordner, der bei der Synchronisation bearbeitet wird.
    In dem Zielordner werden beispielsweise Dateien ersetzt, wenn in dem Quellordner
    eine andere/neue Datei vorliegt. der Zielordner ist also der 'veraltete' Ordner,
    welcher aktualisiert wird. Auch Netzwerk-Ordner oder Datenträger wie
    USB-Stick's / externe Festplatten werden unterstützt.

    1.2 Was ist der Quellordner?
    Der Quellordner ist der Ordner, der dem Zielordner die (aktuelleren) Daten lieftert,
    damit der Zielordner sich aktualisieren kann. Auch Netzwerk-Ordner oder Datenträger wie
    USB-Stick's / externe Festplatten werden unterstützt.


    2.0 Optionen

    2.1 Synchronisiere neue Dateien
    Diese Option bewirkt, dass Dateien, die im Quellordner vorhanden sind,
    im Zielordner allerdings nicht, vom Quellordner in den Zielordner kopiert werden.
    Diese Option sollte Bestandteil einer Synchronisation sein,
    um sich so die neusten Dateien aus dem Quellordner zu kopieren.

    2.2 Synchronisiere veränderte Dateien
    Diese Option bewirkt, dass wenn eine Datei in beiden Ordnern vorhanden ist,
    die Datei aus dem Quellordner die Datei aus dem Zielordner überschreibt.
    Somit werden Dateien aktualisiert, und zwar die 'alte' Datei aus dem Zielordner
    wird mit der neuen Datei aus dem Quellordner ersetzt.

    2.3 Synchronisiere gelöschte Dateien
    Diese Option bewirkt, dass Dateien, die im Zielordner vorhanden sind,
    im Quellordner allerdings nicht, im Zielordner gelöscht werden.
    Diese Option sollte vorsichtig verwendet werden, da sie Dateien
    aus dem Zielordner löschen könnte, die eventuell noch benötigt werden.


    3.0 Log-Dateien

    3.1 Logdateien Speichern
    Sie können im Menü unter dem Menüpunkt Erweitert -> Logs -> Logs erstellen entscheiden,
    ob Log-Dateien angelegt werden sollen oder nicht. Eine Log-Datei wird
    nach jeder Synchronisation angelegt, und beinhaltet alle Aktionen die getätigt wurden.

    3.2 Logdateien Speicherpfad
    Unter dem Menüpunkt Erweitert -> Logs -> Log Speicherpfad den Pfad, wo die
    Log Dateien gespeichert werden sollen, bestimmen. Der aktuelle log Speicherpfad
    steht in Klammern.


    4.0 Synchronisations-Shortcuts

    4.1 Was ist ein Synchronisations-Shortcut?
    Ein Synchronisations-Shortcut ist eine Datei, die man anlegen kann, um mit
    einem Klick eine Synchronisation durchzuführen. Die Optionen der Synchronisation legt man
    vorher fest und speichert sie in dem Shortcut. Somit ist es möglich, sich mehrere
    Shortcuts anzulegen, um somit verschiedene Synchronisationen schnell durchzuführen,
    wenn man es benötigt.

    4.2 Synchronisations-Shortcut erstellen
    Um ein Synchronisations-Shortcut zu erstellen, startet man Ordner Synchronisation Version 1.1 Beta
    wie gewöhnlich und wählt den Zielordner, Quellordner, sowie die Optionen nach belieben aus. Auch eine
    Log-Datei wird in Abhängigkeit der Logeinstellungen bei einer Synchronisation per Shortcut erstellt.
    Statt nun jedoch die Synchronisation zu starten, wählt man im Menü den Eintrag
    'Erweitert -> Synchronisations-Shortcut anlegen'. Nach der Eingabe des Namens und des Speicherorts
    erhält man eine Bestätigung, mit welchen Einstellungen das Shortcut erstellt wurde.
    Bei jeder Ausführung dieses erstellten Shortcuts wird eine Synchronisation mit diesen
    Einstellungen durchgeführt. Achtung: Bei der Synchronisation mit einem Shortcut wird vorher KEINE
    Aktionsliste erstellt, die bearbeitet werden könnte.

    Ich nutze das Programm, um meinen Schul-USBstick mit meinem Ordner auf dem Rechner zu synchronisieren, um meine AutoIt Backups auf unserem Heimserver auf dem aktuellen Stand zu haben und auch meine Mp3s :) Deshalb hab ich auch die Synchronisations-Shortcut-Funktion erstellt.

    Hier der Sourcecode, auch mit compilter Exe:
    autoit.de/wcf/attachment/8294/

    changelog 1.1 Beta -> 1.2 Beta:
    Felder Quellordner und Zielordner vertauscht
    "Neuer Ordner" Button bei Zielordner hinzugefügt
    "Neuer Ordner" Button bei "setze Log-Speicherpfad" hinzugefügt

    Freue mich auf Kritik und Anregungen!! :)

    Grüße, Max

  • Hallo gon,

    sehr gutes Idee, einziger Änderungsvorschlag fürs Hnadling:

    [autoit]

    ;Zeile 323
    $TmpPath = FileSelectFolder("Zielordner auswählen", "", 7, GUICtrlRead($InputZiel))
    ;Zeile 325

    [/autoit]


    Leider meldet er mir immer: Gleicher Stand. Dabei habe ich den Zielordner erst unmittelbar vorher angelegt und es wurde keine einzige Datei kopiert. Einstellungen: [x] Synchronisiere neuere, [x] Synchronisiere veränderte, [ ] Synchronisiere gelöschte.
    Es wird auch kein Log-File erstellt (wurde ja auch nichts kopiert)

    mfg (Auto)Bert

  • Hallo gon,

    sehr gutes Idee, einziger Änderungsvorschlag fürs Hnadling:

    [autoit]

    ;Zeile 323
    $TmpPath = FileSelectFolder("Zielordner auswählen", "", 7, GUICtrlRead($InputZiel))
    ;Zeile 325

    [/autoit]


    Leider meldet er mir immer: Gleicher Stand. Dabei habe ich den Zielordner erst unmittelbar vorher angelegt und es wurde keine einzige Datei kopiert. Einstellungen: [x] Synchronisiere neuere, [x] Synchronisiere veränderte, [ ] Synchronisiere gelöschte.
    Es wird auch kein Log-File erstellt (wurde ja auch nichts kopiert)

    mfg (Auto)Bert

    Hi,

    werd ich beim nächsten mal so hochladen, danke ;)
    Aber dass er nichts macht, sollte eigentlich nicht passieren O_o
    Bist du dir 100% sicher, dass du Quell und Zielordner nicht verwechselt hat?
    Weil dann ist ja logisch, dass er ohne die Option "löschen" nichts macht, weil der Quellordner ja leer ist ;)
    Vielleicht sollte ich den Quellordner im Menü nach oben setzen, und den Zielordner darunter, werd ich so machen denke ich.

    Zielordner wäre in deinem Fall der leere, neue Ordner
    und Quellordner ist der aktuelle Ordner, wo alles drin ist.

    Edit:
    Neuste Version 1.2 nun oben im ersten Post

    Greetz

    Einmal editiert, zuletzt von qon (19. März 2010 um 13:50)

  • Hallo qon,

    Zitat von qon

    Bist du dir 100% sicher, dass du Quell und Zielordner nicht verwechselt hat?


    muss zu meiner Schande gestehen, ist mir alten Mann tatsächlich passiert,

    mfg (Auto)Bert

  • Hi,

    Hab das Programm erst mit 6k Dateien getestet, dass ging vergleichsweise Flott ( auf meinem Rechner ).
    Wo jetzt die maximale Grenze liegt, weiss ich nicht, aber müsste man mal testen.
    Das einlesen der Dateien dauert dann sicher sehr lange, und ich frage ich, ob das Array nicht zu groß wird :(
    Aber wenn du es testen könntest, wäre das cool :thumbup:
    Pass nur auf, dass du Zielordner und Quellordner nicht verwechselst ;)
    Aber in der HIlfe steht alles drin, was das Programm macht.

    Greetz

    In meinem Fall sind es 90k Dateien :D :D
    Joa, lange dauerts schon nen bisschen. Wäre aber zumindest schön gewesen, wenn sich beim Einlesen und beim Erstellen der Aktionsliste der Ladebalken auch bewegt hätte :S Man könnte ja evtl. jede Minute kurz abfragen, wie weit die Dateien eingelesen wurden bzw. wo der momentane Stand ist und dann entsprechend den Balken anzeigen bzw. sogar eine Zeitanzeige. Sonst hätte ich nämlich früher ins Bett gehen können. nach einer Stunde war dann nämlich das Einlesen fertig und die Aktionsliste wurde dann erst 8std. später erstellt (7Uhr heute morgen) :D
    Naja, bei ca. 90k Dateien auf beiden Laufwerken war das schon ne Leistung :thumbup:
    Werde das Tool in diesem Fall nicht umbedingt nochmal benutzen, da es halt viel zu lang dauert. Für kleinere Sachen, wie USB-Stick synchronisieren ist das aber trotzdem nützlich und für Sicherungskopien. Für solche Zwecke würde ich es aber troztdem gerne nutzen.

    Praktisch wäre es auch, wenn es vor dem Beenden eine Sicherheitsabfrage geben würde, statt dass man das Fenster übherhaupt nicht schließen kann. Ich musste dann nämlich den Prozess killen, weil ich eine zweite Instanz geöffnet hatte...
    Interessant wäre es sicherlich auch, das Tool in den Tray schicken zu können.

    Bei solch großen Datenmengen würde sich evtl. auch eine Shutdown-Funktion gut machen.

    Ein blödes Problem gab es trotzdem noch: Die Datein hat er alle erfolgreich kopiert, aber leider nicht in den Ordner, wo sie rein sollten, sondern in der übergeordneten Ebene und hat stattdessen den Zielordnernamen in den Dateinamen der kopierten Dateien eingebaut^^
    War zwar nur eine Sache von 10min. das alles zu beheben, aber trotzdem unnötig. Wahrscheinlich hat der Schrägstrich oben beim Zielordnerauswahlfeld gefehlt (obwohl ich ihn über Durchsuchen ausgewählt habe). Wahrscheinlich übernimmt das Script vom Durchsuchen nur den Ordnernamen, aber nicht den Schrägstrich, der eigentlich noch extra hinzugefügt werden müsste.
    Ich wunder mich, dass das noch niemandem andrem aufgefallen ist.

    Finde das Programm aber trotzdem wirklich professionell aufgemacht und für "normale" Datenmengen auf jeden Fall ausreichend. Für meine 30GB bzw. über 90k Dateien ist es aber nicht so sinnvoll nach dem momentanen Stand...
    Man müsste da wirklich irgendwas an der Geschwindigkeit arbeiten.

    So, das war jetzt der ultimative Rundumtest.
    Ich kann nur sagen: Erfolgreich bestanden :thumbup: :thumbup:
    Das war eine Menge Arbeit von dir und da habe ich echt Respekt vor! Nochmal vielen Dank! Vielleicht helfen dir ja die Kleinigkeiten, die mir aufgefallen sind, um das Script noch weiter zu verbessern :)

  • Hi,

    danke für das umfangreiche Feedback!
    Also, dass mit dem Ladebalken beim einlesen der Dateien... ist glaube nicht möglich :/
    Während die rekursive Suche läuft, weiss man ja noch garnicht, wieviel Dateien es sind, die er einließt.
    Zu den 90k Dateien einlesen: Wundert mich irgendwie, dass es SOOOO lange dauert^^
    Bei 6k Dateien hat es bei mir ~10sec gedauert, diese einzulesen und die Aktionsliste zu erstellen, aber habe auch einen schnellen Rechner ;)
    Was war es bei dir für ein Rechner?
    Und der Kopiervorgang an sich dauert dann eigentlich nicht länger als von Windows selbst.

    Das mit dem Fehler mit dem Schrägstrich versteh ich nicht, kannst du vll. das konkrete Beispiel nennen?
    Also Pfade/Dateinamen, und was er drauß gemacht hat? Wäre gut :) Weil bei mir funzt da eigentlich alles Problemlos.

    edit: ich glaube, wenn hinter dem Quellordner ein abschließender Backslash ist, und hinter dem Zielordner nicht, dann geht was schief.
    Wenn hinter beidem einer ist aber nicht.

    Greetz

    Einmal editiert, zuletzt von qon (24. März 2010 um 15:31)

  • Kein Problem! Von dem Feedback hat doch jeder etwas :)


    Hm, vielleicht hats auch nur daran gelegen, dass der PC nur 2 GHz hatte :rolleyes:
    Die CPU war nämlich meistens zu 100% ausgelastet.

    Zum Fehler mit dem Schrägstrich:
    Quellordner: C:\
    Zielordner E:\Ordnerxy <--- Hier fehlt wahrscheinlich der Schrägstrich

    Ergebnis: Dateien (erste Ebene, d.h. die Ordner bzw. Dateien, die man direkt sehen konnte, wenn man den Ordner geöffnet hat), wurden unter E:\ gespeichtert und hatte den Namen OrdnerxyDateixy

    Der Kopiervorgang war OK, aber das Einlesen und Aktionslisteerstellen hat wegen dem langsamen Prozessor sehr lange gedauert. Am besten mache ich es nächstes Mal an einem schnelleren PC, wenn du dir so sicher bist, dass das so schnell geht :)

  • Hi und danke,

    ja mein Verdacht hatte sich bestätigt, wenn beim Quellordner ein Backslash ist und beim Zielordner nicht, läufts schief ( z.B. wie bei dir "C:\" )
    Werde das updaten..
    Und zu dem Speed: Hab auch ein Quadcore i7, da ist das logisch xD

    Greetz