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
Ordner (via FTP) synchronisieren
-
- User
- Beiträge: 51
- Registriert: Samstag 7. Oktober 2006, 15:13
Kann FTP denn SHA ohne die gesamte Datei zu übertragen.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.
Dateien werden nur lokal geändert, obwohl es auch gut wäre, wenn es auch geänderte Dateien auf dem Server erkennt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Kannst ja die Timestamps vergleichen.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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wenn die Daten nur in eine Richtung aktualisiert werden sollen, würde ich `rsync` nehmen, ansonsten `unison`.
-
- User
- Beiträge: 51
- Registriert: Samstag 7. Oktober 2006, 15:13
Die Sache ist halt, ich hätte das gerne in Python only.BlackJack hat geschrieben:Wenn die Daten nur in eine Richtung aktualisiert werden sollen, würde ich `rsync` nehmen, ansonsten `unison`.
- 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
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Warum? Die beiden anderen Lösungen sind genau für diesen Zweck gedacht und auch ausgiebig getestet.gummibaerchen hat geschrieben:Die Sache ist halt, ich hätte das gerne in Python only.
Der Rsync-Algorithmusgummibaerchen hat geschrieben:Und wie gehen andere Tools vor (zum Beispiel rsync, lftp), die solch eine Funktionalität bieten.
- 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...
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...