Windows rsync qui prend en charge les noms de fichiers longs, ou une bonne alternative?

13

Je rsync actuellement sur un hôte Linux pour copier des choses de Windows vers ma boîte Linux. Mais je ne peux pas copier des fichiers avec des noms longs.

J'ai essayé DeltaCopy , cwrsync et cygwin . D'après ce que j'ai trouvé là-bas, tous ces outils refusent de copier des fichiers lorsque la longueur du fichier devient longue, cela semble être quelque part autour de 255 caractères.

Ce problème est résolu sur les forums cwrsync ici et il devrait être résolu dans le futur à chaque sortie de cygwin 1.7 et UTF8 est pris en charge. Il y a même un build de test ici .

Je ne suis pas particulièrement à l'aise avec l'utilisation du test sur un système de production. J'espère que quelqu'un connaît une autre option rsync.

Comme alternative à rsync, connaissez-vous un autre outil que je peux copier une structure de répertoire sur Linux à partir d'un hôte Windows qui n'aura pas de problèmes avec des fichiers longs ou nommés de manière inhabituelle? Le point important est que j'ai besoin d'un outil qui peut facilement fonctionner à travers un tunnel SSH. Certains systèmes sont au-delà des pare-feu, et je crois que SSH est le tunnel que je serai autorisé à utiliser.

Zoredache
la source
Pour info cwrsync a publié une mise à jour basée sur cygwin 1.7 qui prend en charge les noms de fichiers longs! itefix.no/i2/node/12070
Zoredache

Réponses:

6

Je manque peut-être le point, mais avez-vous envisagé d'utiliser Robocopy sous Windows. Il est similaire à RSync mais vous ne pouvez pas le planifier directement depuis l'application.

Ce problème peut être surmonté en écrivant un fichier de commandes pour la copie, puis en créant une tâche planifiée. Robocopy est gratuit et extrêmement robuste. Je l'utilise souvent pour copier des fichiers entre Linux et Windows en utilisant Samba et le réseau, et la capacité de reprise de Robocopy est vraiment puissante.

BinaryMisfit
la source
robocopy est une option que j'ai envisagée, mais elle fonctionne dans la mauvaise direction (pousser de win à lin), je voulais tirer de Windows sur Linux. Je soupçonne que je devrai peut-être aller dans cette direction si je ne trouve rien de mieux.
Zoredache
5

Ah! Vous pouvez utiliser subst avec rsync.

Si vous avez une arborescence de répertoires approfondie d: \ very \ long \ file \ n \ ame \ etc \ etc, l'expérience révèle que vous pouvez remplacer X: to d: \ very \ long \ file \ name \ etc puis rsync to et depuis / cygdrive / x / peu importe. Cela fonctionne à la fois côté client et côté serveur.

Maintenant, alors que vous pouvez utiliser des substituts stratégiques pour réduire la longueur des noms de fichiers, je ne sais pas si cela vous permet de contourner la limite de 260 caractères. Cela peut également ne pas être très pratique. Ça vaut le coup d'essayer.

John Rennie.

---- 8 <----

Voir http://www.ratsauce.co.uk/notablog/LongFilenames.asp pour mes divagations sur les noms de fichiers longs.

Je ne connais aucun moyen d'obtenir le préfixe \\? \ À Cygwin, et évidemment la version actuelle de Cygwin n'utilise pas le préfixe en interne. Vraisemblablement, ils traitent de cela dans la nouvelle version et c'est pourquoi il prendra en charge les noms de plus de 260 caractères. J'utilise le Cygwin rsync partout donc comme vous j'attends avec impatience la sortie.

Il y a d'autres problèmes avec le rsync Cygwin. Il fait un gâchis d'ACL sauf si vous spécifiez cygwin = nontsec, et il a tendance à se bloquer sur de très gros répertoires. Sur ma liste de choses à faire avant de mourir est d'écrire une version Windows native de rsync qui n'aura pas ces problèmes. Je crois que cela a été fait, mais uniquement en tant que versions commerciales et non du domaine public.

JR

John Rennie
la source
Rsync semble se bloquer sur de gros répertoires car il doit d'abord lire tous les fichiers. Le problème est que Windows lit d'abord tous les fichiers, puis rsync entre en jeu. Cela peut prendre quelques minutes à Windows pour analyser le répertoire en fonction du nombre de fichiers.
Ryaner
Ce n'est plus le cas avec rsync 3.0. Il envoie maintenant une liste de fichiers incrémentielle afin qu'il puisse commencer à envoyer des fichiers plus tôt.
James Sneeringer
2

Je vous suggère d'essayer Unison http://www.cis.upenn.edu/~bcpierce/unison/

C'est une alternative très intéressante à rsync car elle peut également fournir une synchronisation bidirectionnelle (ce que rsync n'est pas en mesure de faire). Je l'ai déjà utilisé avec succès sur 2 machines virtuelles et j'étais très satisfait des résultats.

Mais en ce qui concerne le nom de fichier long, je ne sais pas si cela fonctionne comme vous le souhaitez.

Depuis le site officiel:

Unison est un outil de synchronisation de fichiers pour Unix et Windows. Il permet à deux répliques d'une collection de fichiers et de répertoires d'être stockées sur différents hôtes (ou différents disques sur le même hôte), modifiées séparément, puis mises à jour en propageant les modifications de chaque réplique à l'autre.

Olivier Jaquemet
la source
L'avez-vous utilisé avec des chemins plus longs de 250 caractères? Il semble que le seul moyen de l'obtenir sur Windows soit via cygwin, ce qui signifie, je crois, qu'il aura exactement le même problème que j'ai avec le cygwin rsync.
Zoredache
Je n'ai pas testé le long chemin, mais les binaires Unison pour Windows sont construits en utilisant cygwin.dll (il est fourni avec les binaires, pas besoin d'installer cygwin), donc cela pourrait fonctionner correctement. Essayez-le :)
Olivier Jaquemet
2

Juste une note que j'ai rencontré le même problème (limitations de cygwin pré-1.7) et j'ai trouvé une version fonctionnelle de cwrsync avec cygwin 1.7 ici:

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

(Lien original trouvé sur les forums cwrsync)

Pas exactement une version officielle, mais cela a résolu mes problèmes de jeu de caractères :)


la source
1

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

http://www.okisoft.co.jp/esc/utf8-cygwin/ Possède une couche UTF8, ce qui a pour effet secondaire d'augmenter la taille de chemin possible. Selon son auteur, si vous souhaitez utiliser plus de caractères, vous pouvez augmenter la constante dans le patch. Cela semble encore plus hackeux.

Ce n'est probablement pas votre meilleur pari pour la synchronisation à distance, mais c'est une synchronisation Windows qui prétend prendre en charge des noms de fichiers plus longs.

redblacktree
la source
Ce message m'inquiète un peu ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "Fondamentalement, il y a un correctif de 930 lignes, dont la plupart est nouveau. FWICS, il peut ne pas couvrir tous les endroits où Unicode une conversion peut être nécessaire (en particulier, l'envoi d'Unicode via un canal en mode texte échouera très probablement de manière spectaculaire) "
Zoredache
0

Donc, si les outils sont mauvais sur Windows, existe-t-il un moyen d'utiliser l'outil Linux?

Avec ssh - sshfs ?

Sans ssh - utiliser un VPN et monter en tant que SMB?

Dans les deux cas, vous pouvez utiliser le client Linux rsync plus performant contre un système de fichiers. Je ne l'ai pas fait avec 10 Go de données, donc YMMV. :)

Cawflands
la source
J'essaie de tirer des fichiers de Windows vers ma boîte Linux. De plus, je ne veux vraiment pas créer d'archive car je parle de beaucoup de données de 10 Go + que je veux synchroniser chaque semaine. Si je crée une archive, je ne bénéficierai pas de mises à jour incrémentielles.
Zoredache
OK, réponse révisée.
Cawflands
0

Cela ne fera pas de grandes structures de fichiers, mais pour des ensembles de données relativement petits avec des noms longs, vous pouvez envisager d'utiliser quelque chose comme 7-Zip pour créer une archive que rsync pourrait ensuite transférer. Vous avez dit que vous devez extraire des données des serveurs Windows vers un serveur Linux. Si vous avez accès au shell, archivez les données dont vous avez besoin dans un conteneur (7-zip), transférez le conteneur et développez-le lorsqu'il arrive sur le serveur. Cela pousse le problème du nom de fichier long sur l'archiveur, pour lequel je pense qu'il existe un meilleur support et des outils non Cygwin.

sysadmin1138
la source
0

Afin de ne pas perdre la portabilité, je vous recommande de rester avec rsync et d'essayer de résoudre la limitation 255. Cette limitation n'est plus à l'intérieur de Windows et est dans le code RSYNC - en fait, la limite sur Windows est d'environ 2048 maintenant (si je me souviens bien).

Je suis sûr qu'il n'y a pas d'autres ports rsync que ceux spécifiés par vous et je vous suggère d'utiliser la version de test et de signaler les bogues que vous pourriez trouver.

Si cela ne vous dérange pas d'utiliser FTP, vous pouvez essayer LFTP - il a une très bonne fonction de mise en miroir mais il n'est pas comparable à rsync en matière de sauvegarde / synchronisation.

Sorin
la source
0

J'ai piraté un script qui peut temporairement renommer des fichiers ou des répertoires avec des noms plus courts afin que rsync (et d'autres programmes) puissent continuer. Vous pouvez l'utiliser dans le cadre de la chaîne d'outils que vous utilisez pour copier des fichiers de Linux vers Windows (rsync ou autre). Je ne sais pas ce que vous entendez par "inhabituel", alors peut-être que cela ne répond qu'à une partie de vos besoins. Veuillez me faire savoir si cela vous est utile.

taltman
la source