Seite 1 von 1

Ordner (via FTP) synchronisieren

Verfasst: Freitag 2. Februar 2007, 19:20
von gummibaerchen
Hallo,

ich habe einen Ordner, den ich in der gleichen Form auch online brauche.

Dafür wollte ich jetzt ein kleines Python-Programm schreiben, was mir die Ordner synchronisiert.

Die Frage ist nur, wie macht man das am besten.

Und wie gehen andere Tools vor (zum Beispiel rsync, lftp), die solch eine Funktionalität bieten.

Klar könnte man alle Dateien vergleichen, aber das wäre doch ein enormer Datentransfer und bei vielen Dateien (die die sich nicht geändert haben) einfach unnötigt.

Danke für alle Tipps,
gummibaerchen

Verfasst: Freitag 2. Februar 2007, 21:06
von jens
änderst du denn auf beiden Seiten den Ordner gleichzeitig?

Ich denke eine SHA Checksum könnte da hilfreich sein. Stimmt die nicht mehr überein, wurde die Datei geändert und muß übertragen werden.

Verfasst: Freitag 2. Februar 2007, 21:45
von gummibaerchen
jens hat geschrieben:änderst du denn auf beiden Seiten den Ordner gleichzeitig?

Ich denke eine SHA Checksum könnte da hilfreich sein. Stimmt die nicht mehr überein, wurde die Datei geändert und muß übertragen werden.
Kann FTP denn SHA ohne die gesamte Datei zu übertragen.

Dateien werden nur lokal geändert, obwohl es auch gut wäre, wenn es auch geänderte Dateien auf dem Server erkennt.

Re: Ordner (via FTP) synchronisieren

Verfasst: Freitag 2. Februar 2007, 22:28
von Leonidas
gummibaerchen hat geschrieben:Klar könnte man alle Dateien vergleichen, aber das wäre doch ein enormer Datentransfer und bei vielen Dateien (die die sich nicht geändert haben) einfach unnötigt.
Kannst ja die Timestamps vergleichen.

Verfasst: Freitag 2. Februar 2007, 23:06
von BlackJack
Wenn die Daten nur in eine Richtung aktualisiert werden sollen, würde ich `rsync` nehmen, ansonsten `unison`.

Verfasst: Freitag 2. Februar 2007, 23:50
von gummibaerchen
BlackJack hat geschrieben:Wenn die Daten nur in eine Richtung aktualisiert werden sollen, würde ich `rsync` nehmen, ansonsten `unison`.
Die Sache ist halt, ich hätte das gerne in Python only.

Verfasst: Samstag 3. Februar 2007, 09:20
von gerold
Hallo gummibaerchen!

Mit FTP kannst du dir das Inhaltsverzeichnis eines Ordners zum Client herunterladen. Alles was du tun kannst (!) ist die Zeiten vergleichen. Einen Dateivergleich kannst du nicht durchführen, ohne die Dateien vorher zum Client zu laden. Aber das genügt in den meisten Fällen.

Wenn du die Dateien vergleichen willst, dann brauchst du einen privilegierteren Zugang. FTP reicht da nicht mehr aus. "Rsync" ist dafür ideal geeignet, da es gerade mal genug Rechte für die Dateisynchronisation zur Verfügung stellt, daber ansonsten keinen so großen Angriffspunkt zur Verfügung stellt. SSH wäre schon ein wenig übertrieben.

Vielleicht ist das hier brauchbar: http://cheeseshop.python.org/pypi/rsync.py

mfg
Gerold
:-)

Verfasst: Samstag 3. Februar 2007, 11:13
von BlackJack
gummibaerchen hat geschrieben:Die Sache ist halt, ich hätte das gerne in Python only.
Warum? Die beiden anderen Lösungen sind genau für diesen Zweck gedacht und auch ausgiebig getestet.

Re: Ordner (via FTP) synchronisieren

Verfasst: Samstag 3. Februar 2007, 11:49
von Joghurt
gummibaerchen hat geschrieben:Und wie gehen andere Tools vor (zum Beispiel rsync, lftp), die solch eine Funktionalität bieten.
Der Rsync-Algorithmus

Verfasst: Samstag 3. Februar 2007, 18:31
von jens
Meine Idee mit dem SHA Hash war eine andere. Vorraussetzung ist allerdings, das die Daten auf dem FTP Server nicht geändert werden, sondern dort ehr ein "passiver Mirror" entstehen soll.
Also: Man packt eine SHA-Checksum (oder auch MD5) zu jeder Datei auf dem FTP zusätzlich dabei. Beim nächsten sync braucht man (Wenn Länge genau gleich ist) erstmal auf dem Client den Hash vergleichen. Ist dieser auch gleich, braucht die Datei nicht übertragen werden...