¿Windows rsync que admite nombres largos de archivo, o una buena alternativa?

13

Actualmente rsync en un host de Linux para copiar cosas de Windows a mi caja de Linux. Pero no puedo copiar archivos con nombres largos.

He intentado DeltaCopy , cwrsync y cygwin . Por lo que he encontrado allí, todas estas herramientas se niegan a copiar archivos cuando la longitud del archivo se hace larga, esto parece estar en algún lugar alrededor de 255 caracteres.

Este problema se aborda en los foros de cwrsync aquí y supuestamente se puede solucionar en algún momento en el futuro cuando salga cygwin 1.7 y se admita UTF8. Incluso hay una versión de prueba aquí .

No me siento particularmente cómodo usando la versión de prueba en un sistema de producción. Espero que alguien sepa de otra opción rsync.

Como alternativa a rsync, ¿conoce otra herramienta que pueda copiar una estructura de directorio en Linux desde un host de Windows que no tenga problemas con archivos largos o con nombres inusuales? Lo importante es que necesito una herramienta que pueda funcionar fácilmente en un túnel SSH. Algunos de los sistemas están más allá de los firewalls, y creo que SSH es el túnel que se me permitirá usar.

Zoredache
fuente
¡Para su información, cwrsync ha lanzado una actualización basada en cygwin 1.7 que admite nombres largos de archivo! itefix.no/i2/node/12070
Zoredache

Respuestas:

6

Puede que me esté perdiendo el punto, pero ¿ha considerado usar Robocopy en Windows? Es similar a RSync, sin embargo, no puede programarlo directamente desde la aplicación.

Esto se puede superar escribiendo un archivo por lotes para la copia y luego creando una tarea programada. Robocopy es gratis y extremadamente robusto. A menudo lo uso para copiar archivos entre Linux y Windows usando Samba y la red, y la capacidad de reanudar de Robocopy es realmente poderosa.

BinaryMisfit
fuente
robocopy es una opción que he estado considerando, pero funciona en la dirección incorrecta (empuje de win a lin), quería extraer desde Windows en Linux. Sospecho que quizás tenga que ir en esta dirección si no encuentro nada mejor
Zoredache
5

¡Ajá! Puede usar subst con rsync.

Si tiene un árbol de directorios profundo d: \ very \ long \ file \ n \ ame \ etc \ etc, entonces el experimento revela que puede sustituir X: a d: \ very \ long \ file \ name \ etc y luego rsync a y de / cygdrive / x / lo que sea. Esto funciona tanto en el extremo del cliente como en el extremo del servidor.

Ahora, si bien puede usar sustitutos estratégicos para reducir la longitud de los nombres de archivo, no sé si esto le permite omitir el límite de 260 caracteres. También puede no ser muy conveniente. Vale la pena intentarlo.

John Rennie

---- 8 <----

Ver http://www.ratsauce.co.uk/notablog/LongFilenames.asp para mis divagaciones sobre nombres de archivo largos.

No conozco ninguna forma de obtener el prefijo \\? \ Para Cygwin, y obviamente la versión actual de Cygwin no usa el prefijo internamente. Presumiblemente están abordando esto en la nueva versión y es por eso que admitirá nombres de más de 260 caracteres. Utilizo el rsync de Cygwin por todas partes, así que, como tú, espero ansiosamente el lanzamiento.

Hay algunos otros problemas con Cygwin rsync. Hace un lío de ACL a menos que especifique cygwin = nontsec, y tiende a colgarse en directorios muy grandes. En mi lista de cosas que hacer antes de morir es escribir una versión nativa de Windows de rsync que no tenga estos problemas. Creo que esto se ha hecho, pero solo como versiones comerciales, no de dominio público.

JR

John Rennie
fuente
Parece que Rsync se cuelga en directorios grandes porque primero tiene que leer todos los archivos. El problema es que Windows lee primero todos los archivos, luego rsync se activa. Puede tomarle unos minutos a Windows escanear el directorio dependiendo de cuántos archivos haya.
Ryaner
Este ya no es el caso con rsync 3.0. Ahora envía una lista de archivos incremental para que pueda comenzar a enviar archivos antes.
James Sneeringer el
2

Te sugiero que pruebes Unison http://www.cis.upenn.edu/~bcpierce/unison/

Es una alternativa muy interesante a rsync porque también puede proporcionar sincronización bidireccional (que rsync no puede hacer). Ya lo he usado con éxito en 2 máquinas virtuales y quedé muy satisfecho con los resultados.

Pero en lo que respecta al nombre de archivo largo, no sé si funciona como desea.

Desde el sitio web oficial:

Unison es una herramienta de sincronización de archivos para Unix y Windows. Permite que dos réplicas de una colección de archivos y directorios se almacenen en diferentes hosts (o diferentes discos en el mismo host), se modifiquen por separado y luego se actualicen propagando los cambios en cada réplica a la otra.

Olivier Jaquemet
fuente
¿Lo has usado con rutas de más de 250 caracteres? Parece que la única forma de obtenerlo en Windows es a través de cygwin, lo que creo que significa que tendrá exactamente el mismo problema que estoy teniendo con el cygwin rsync.
Zoredache
No he probado la ruta larga, pero los binarios de Unison para Windows se crean utilizando cygwin.dll (se incluye con los binarios, no es necesario instalar cygwin), por lo tanto, podría funcionar correctamente. Pruébelo :)
Olivier Jaquemet
2

Solo una nota de que me encuentro con el mismo problema (limitaciones de pre-1.7 cygwin) y encontré una compilación funcional de cwrsync con cygwin 1.7 aquí:

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

(Enlace original encontrado en los foros de cwrsync)

No es exactamente una compilación oficial, pero resolvió mis problemas de juego de caracteres :)


fuente
1

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

http://www.okisoft.co.jp/esc/utf8-cygwin/ Tiene una capa UTF8, que tiene el efecto secundario de aumentar el posible tamaño del camino. Según su autor, si desea utilizar más caracteres, puede subir la constante en el parche. Eso parece aún más hackish.

Probablemente no sea su mejor opción para la sincronización remota, pero es un rsync de Windows que dice admitir nombres de archivo más largos.

redblacktree
fuente
Esta publicación me preocupa un poco ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "Básicamente, hay un parche de 930 líneas, la mayoría de los cuales es nuevo. FWICS, puede que no cubra todos los lugares donde Unicode puede ser necesaria la conversión (en particular, el envío de Unicode a través de una tubería de modo de texto probablemente falle espectacularmente) "
Zoredache
0

Entonces, si las herramientas son malas en Windows, ¿hay alguna manera de usar la herramienta Linux?

Con ssh - sshfs ?

Sin ssh: ¿usar una VPN y montar como SMB?

De cualquier manera, le permitiría usar el cliente rsync Linux más capaz contra un sistema de archivos. No he hecho esto con 10 GB de datos, así que YMMV. :)

Cawflands
fuente
Estoy tratando de extraer archivos de Windows a mi caja de Linux. Además, realmente no quiero crear un archivo, ya que estoy hablando de una gran cantidad de datos de 10GB + que quiero sincronizar semanalmente. Si construyo un archivo no obtendré el beneficio de las actualizaciones incrementales.
Zoredache
OK, respuesta revisada.
Cawflands
0

Esto no hará grandes estructuras de archivos, pero para conjuntos de datos relativamente pequeños con nombres largos, puede considerar usar algo como 7-Zip para crear un archivo que luego pueda transferir rsync. Dijiste que necesitas extraer datos de los servidores de Windows a un servidor de Linux. Si tiene acceso de shell, archive los datos que necesita en un contenedor (7-zip), transfiera el contenedor y amplíelo cuando llegue al servidor. Esto empuja el problema del nombre de archivo largo al archivador, para lo cual creo que hay un mejor soporte y herramientas que no son de Cygwin.

sysadmin1138
fuente
0

Para no perder la portabilidad, le recomendaría que permanezca con rsync e intente resolver la limitación 255. Esta limitación ya no está dentro de Windows y está en el código RSYNC; de hecho, el límite en Windows es alrededor de 2048 ahora (si no recuerdo mal).

Estoy bastante seguro de que no hay otros puertos rsync que los especificados por usted y le sugiero que use la versión de prueba e informe cualquier error que pueda encontrar.

Si no le importa usar FTP, puede probar LFTP: tiene una muy buena función de duplicación pero no se compara con rsync cuando se trata de copia de seguridad / sincronización.

sorin
fuente
0

Me corté juntos un script que puede renombrar temporalmente los archivos o directorios con nombres más cortos para que rsync (y otros programas) pueden proceder. Puede usar esto como parte de la cadena de herramientas que está usando para copiar archivos de Linux a Windows (rsync o de otro modo). No sé qué quiere decir con "inusual", por lo que quizás esto solo aborde una parte de sus requisitos. Avíseme si es útil para usted.

taltman
fuente