Windows-Rsync, das lange Dateinamen unterstützt, oder eine gute Alternative?

13

Ich synchronisiere derzeit auf einem Linux-Host, um Dinge von Windows auf meine Linux-Box zu kopieren. Ich kann jedoch keine Dateien mit langen Namen kopieren.

Ich habe DeltaCopy , cwrsync und cygwin ausprobiert . Von dem, was ich dort gefunden habe, lehnen alle diese Tools das Kopieren von Dateien ab, wenn die Länge der Datei lang wird. Dies scheint irgendwo bei 255 Zeichen zu liegen.

Dieses Problem wird in den cwrsync-Foren hier behoben und möglicherweise irgendwann in der Zukunft behoben, wenn Cygwin 1.7 herauskommt und UTF8 unterstützt wird. Es gibt sogar einen Test Build hier .

Ich bin mit dem Test, der auf einem Produktionssystem aufbaut, nicht besonders vertraut. Ich hoffe, jemand kennt eine andere rsync-Option.

Kennen Sie als Alternative zu rsync ein anderes Tool, mit dem ich eine Verzeichnisstruktur unter Linux von einem Windows-Host kopieren kann, der keine Probleme mit langen oder ungewöhnlich benannten Dateien hat? Wichtig ist, dass ich ein Tool benötige, das problemlos in einem SSH-Tunnel funktioniert. Einige der Systeme sind jenseits von Firewalls, und ich glaube, SSH ist der Tunnel, den ich verwenden darf.

Zoredache
quelle
Zu Ihrer Information cwrsync hat ein Update auf Basis von cygwin 1.7 veröffentlicht, das lange Dateinamen unterstützt! itefix.no/i2/node/12070
Zoredache

Antworten:

6

Ich kann den Punkt verfehlen, aber haben Sie erwogen, Robocopy auf Windows zu verwenden. Es ähnelt RSync, Sie können es jedoch nicht direkt in der Anwendung planen.

Dies kann überwunden werden, indem eine Batchdatei für die Kopie geschrieben und anschließend eine geplante Aufgabe erstellt wird. Robocopy ist kostenlos und äußerst robust. Ich benutze es oft, um Dateien zwischen Linux und Windows mit Samba und dem Netzwerk zu kopieren, und die Wiederaufnahmefähigkeit von Robocopy ist wirklich mächtig.

BinaryMisfit
quelle
robocopy ist eine Option, über die ich nachgedacht habe, aber sie funktioniert in die falsche Richtung (von win nach lin pushen). Ich wollte sie unter Linux von Windows ziehen. Ich vermute, dass ich in diese Richtung gehen muss, wenn ich nichts Besseres finde.
Zoredache
5

Aha! Sie können subst mit rsync verwenden.

Wenn Sie einen tiefen Verzeichnisbaum haben, d: \ very \ long \ file \ n \ ame \ etc \ etc, zeigt das Experiment, dass Sie subst X: to d: \ very \ long \ file \ name \ etc und dann rsync to and aus / cygdrive / x / was auch immer. Dies funktioniert sowohl auf der Client-Seite als auch auf der Server-Seite.

Jetzt, wo Sie strategische Substitutionen verwenden können, um die Länge der Dateinamen zu verringern, weiß ich nicht, ob Sie dadurch die Beschränkung auf 260 Zeichen umgehen können. Es kann auch nicht sehr praktisch sein. Einen Versuch wert.

John Rennie.

---- 8 <----

Siehe http://www.ratsauce.co.uk/notablog/LongFilenames.asp für meine Streifzüge über lange Dateinamen.

Ich kenne keine Möglichkeit, das Präfix \\? \ Für Cygwin abzurufen, und offensichtlich verwendet die aktuelle Version von Cygwin das Präfix intern nicht. Vermutlich wird dies in der neuen Version behoben, weshalb Namen mit mehr als 260 Zeichen unterstützt werden. Ich verwende den Cygwin-Rsync überall, so dass ich gespannt auf die Veröffentlichung bin.

Es gibt einige andere Probleme mit dem Cygwin-Rsync. Wenn Sie nicht cygwin = nontsec angeben, werden die ACLs durcheinander gebracht, und es besteht die Tendenz, dass sehr große Verzeichnisse hängen bleiben. Auf meiner Liste der Dinge, die zu tun sind, bevor ich sterbe, steht, eine native Windows-Version von rsync zu schreiben, die diese Probleme nicht aufweist. Ich glaube, dies wurde getan, aber nur als kommerzielle Versionen, nicht als gemeinfreie.

JR

John Rennie
quelle
Rsync scheint in großen Verzeichnissen hängen zu bleiben, da zuerst alle Dateien gelesen werden müssen. Das Problem ist, dass Windows zuerst alle Dateien liest und dann rsync einschaltet. Je nach Anzahl der Dateien kann es einige Minuten dauern, bis Windows das Verzeichnis durchsucht hat.
Ryaner
Dies ist mit rsync 3.0 nicht mehr der Fall. Es wird jetzt eine inkrementelle Dateiliste gesendet, damit Dateien früher gesendet werden können.
James Sneeringer
2

Ich würde vorschlagen, dass Sie versuchen, Unison http://www.cis.upenn.edu/~bcpierce/unison/

Es ist eine sehr interessante Alternative zu rsync, da es auch bidirektionale Synchronisation bietet (was rsync nicht kann). Ich habe es bereits erfolgreich auf 2 virtuellen Maschinen eingesetzt und war mit den Ergebnissen sehr zufrieden.

Aber was den Dateinamen betrifft, weiß ich nicht, ob es so funktioniert, wie Sie es möchten.

Von der offiziellen Website:

Unison ist ein Dateisynchronisationstool für Unix und Windows. Damit können zwei Replikate einer Sammlung von Dateien und Verzeichnissen auf unterschiedlichen Hosts (oder unterschiedlichen Festplatten auf demselben Host) gespeichert, separat geändert und dann aktualisiert werden, indem die Änderungen in jedem Replikat auf den anderen übertragen werden.

Olivier Jaquemet
quelle
Hast du es mit Pfaden länger als die 250 Zeichen benutzt? Es scheint, dass der einzige Weg, um es auf Windows zu bekommen, über Cygwin ist, was meiner Meinung nach bedeutet, dass es genau das gleiche Problem haben wird, das ich mit dem Cygwin-Rsync habe.
Zoredache
Ich habe keinen langen Pfad getestet, aber Unison-Binärdateien für Windows werden mit cygwin.dll erstellt (es wird mit den Binärdateien gebündelt, keine Notwendigkeit, cygwin zu installieren), daher funktioniert es möglicherweise ordnungsgemäß. Probieren Sie es aus :)
Olivier Jaquemet
2

Nur eine Anmerkung, dass ich auf dasselbe Problem stoße (Einschränkungen von Cygwin vor 1.7) und hier einen funktionierenden Build von Cwrsync mit Cygwin 1.7 gefunden habe:

http://www.doering-thomas.de/page.php?seite=1&sub=6&lang=de#rsync

(Ursprünglicher Link aus den cwrsync-Foren gefunden)

Nicht gerade ein offizieller Build, aber er hat meine Probleme mit dem Zeichensatz gelöst :)


quelle
1

http://lists.samba.org/archive/rsync/2009-March/022955.html

http://www.okisoft.co.jp/esc/utf8-cygwin/ Verfügt über eine UTF8-Ebene, die als Nebeneffekt die mögliche Pfadgröße erhöht. Wenn Sie mehr Zeichen verwenden möchten, können Sie laut Autor die Konstante im Patch erhöhen. Das scheint noch hackischer.

Wahrscheinlich nicht die beste Wahl für die Remote-Synchronisierung, aber eine Windows-Synchronisierung, die angeblich längere Dateinamen unterstützt.

rotschwarzbaum
quelle
Dieser Beitrag beunruhigt mich ein wenig ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "Grundsätzlich gibt es einen 930-Zeilen-Patch, von dem der größte Teil neu ist. FWICS deckt möglicherweise nicht alle Bereiche ab, in denen Unicode verwendet wird Möglicherweise ist eine Konvertierung erforderlich (insbesondere das Senden von Unicode über eine Textmode-Pipe wird höchstwahrscheinlich spektakulär scheitern) "
Zoredache
0

Also, wenn die Tools unter Windows schlecht sind, gibt es eine Möglichkeit, das Linux-Tool zu verwenden?

Mit ssh - sshfs ?

Ohne ssh - VPN nutzen und als SMB mounten?

In beiden Fällen können Sie den leistungsfähigeren Linux-rsync-Client für ein Dateisystem verwenden. Ich habe das nicht mit 10 GB Daten gemacht, also YMMV. :)

Cawflands
quelle
Ich versuche, Dateien von Windows auf meine Linux-Box zu ziehen. Außerdem möchte ich wirklich kein Archiv erstellen, da ich über 10 GB Daten spreche, die ich wöchentlich synchronisieren möchte. Wenn ich ein Archiv erstelle, kann ich keine inkrementellen Updates erhalten.
Zoredache
OK, überarbeitete Antwort.
Cawflands
0

Hiermit werden keine großen Dateistrukturen erstellt, aber für relativ kleine Datensätze mit langen Namen können Sie beispielsweise 7-Zip verwenden, um ein Archiv zu erstellen, das dann von rsync übertragen werden kann. Sie sagten, dass Sie Daten von Windows-Servern auf einen Linux-Server ziehen müssen. Wenn Sie Shell-Zugriff haben, archivieren Sie die benötigten Daten in einem Container (7-zip), übertragen Sie den Container und erweitern Sie ihn, wenn er auf den Server gelangt. Dadurch wird das Problem mit langen Dateinamen auf den Archivierer übertragen, für den es meines Erachtens bessere Unterstützung und Tools gibt, die nicht von Cygwin stammen.

sysadmin1138
quelle
0

Um die Portabilität nicht zu verlieren, empfehle ich Ihnen, bei rsync zu bleiben und zu versuchen, die 255-Beschränkung zu lösen. Diese Einschränkung gilt nicht mehr für Windows und ist im RSYNC-Code enthalten. Tatsächlich liegt die Beschränkung für Windows derzeit bei 2048 (wenn ich mich recht erinnere).

Ich bin mir ziemlich sicher, dass es keine anderen Rsync-Ports als die von Ihnen angegebenen gibt, und ich empfehle Ihnen, die Testversion zu verwenden und alle Fehler zu melden, die Sie möglicherweise finden.

Wenn es Ihnen nichts ausmacht, FTP zu verwenden, können Sie es mit LFTP versuchen. Es verfügt zwar über eine sehr gute Spiegelungsfunktion, ist aber in Bezug auf Sicherung / Synchronisierung nicht mit rsync vergleichbar.

Sorin
quelle
0

Ich habe ein Skript gehackt , das vorübergehend Dateien oder Verzeichnisse mit kürzeren Namen umbenennen kann, damit rsync (und andere Programme) fortfahren können. Sie können dies als Teil der Toolkette verwenden, mit der Sie Dateien von Linux nach Windows kopieren (rsync oder auf andere Weise). Ich weiß nicht, was Sie unter "ungewöhnlich" verstehen. Vielleicht wird hier nur ein Teil Ihrer Anforderungen angesprochen. Bitte lassen Sie mich wissen, ob es für Sie hilfreich ist.

Taltman
quelle