Ordner (via FTP) synchronisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gummibaerchen
User
Beiträge: 51
Registriert: Samstag 7. Oktober 2006, 15:13

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

ä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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
gummibaerchen
User
Beiträge: 51
Registriert: Samstag 7. Oktober 2006, 15:13

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Wenn die Daten nur in eine Richtung aktualisiert werden sollen, würde ich `rsync` nehmen, ansonsten `unison`.
gummibaerchen
User
Beiträge: 51
Registriert: Samstag 7. Oktober 2006, 15:13

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

gummibaerchen hat geschrieben:Und wie gehen andere Tools vor (zum Beispiel rsync, lftp), die solch eine Funktionalität bieten.
Der Rsync-Algorithmus
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten