Windows rsync che supporta nomi di file lunghi o una buona alternativa?


13

Attualmente risincronizzo su un host Linux per copiare elementi da Windows sul mio box Linux. Ma non riesco a copiare file con nomi lunghi.

Ho provato DeltaCopy , cwrsync e cygwin . Da quello che ho trovato lì, tutti questi strumenti si rifiutano di copiare i file quando la lunghezza del file diventa lunga, questo sembra essere di circa 255 caratteri.

Questo problema è stato risolto sui forum cwrsync qui e si suppone che possa essere risolto in futuro ogni volta che esce Cygwin 1.7 e UTF8 è supportato. C'è anche una build di test qui .

Non mi sento particolarmente a mio agio nell'utilizzare il test costruito su un sistema di produzione. Spero che qualcuno sappia di un'altra opzione rsync.

In alternativa a rsync conosci un altro strumento che posso copiare una struttura di directory su Linux da un host Windows che non avrà problemi con file lunghi o con nomi insoliti? Il punto importante è che ho bisogno di uno strumento che possa facilmente funzionare attraverso un tunnel SSH. Alcuni sistemi vanno oltre i firewall e credo che SSH sia il tunnel che mi sarà permesso di usare.


FYI cwrsync ha rilasciato un aggiornamento basato su Cygwin 1.7 che supporta nomi di file lunghi! itefix.no/i2/node/12070
Zoredache,

Risposte:


6

Forse mi manca il punto, ma hai preso in considerazione l'utilizzo di Robocopy su Windows. È simile a RSync, tuttavia non è possibile pianificarlo direttamente dall'applicazione.

Questo può essere superato scrivendo un file batch per la copia e quindi creando un'attività pianificata. Robocopy è gratuito ed estremamente robusto. Lo uso spesso per copiare file tra Linux e Windows usando Samba e la rete e la capacità di ripresa di Robocopy è davvero potente.


robocopy è un'opzione che ho preso in considerazione, ma funziona nella direzione sbagliata (push da win a lin), volevo estrarre da windows su Linux. Sospetto che potrei dover andare in questa direzione se non trovo niente di meglio.
Zoredache,

5

Aha! È possibile utilizzare subst con rsync.

Se hai un albero di directory profondo d: \ very \ long \ file \ n \ ame \ etc \ etc, allora l'esperimento rivela che puoi sostituire X: to d: \ very \ long \ file \ name \ etc e quindi risincronizzare con e da / cygdrive / x / qualunque cosa. Funziona sia sul lato client che sul lato server.

Ora, mentre puoi usare sottotit strategici per ridurre la lunghezza dei nomi dei file, non so se questo ti permetta di bypassare il limite di 260 caratteri. Potrebbe anche non essere molto conveniente. Vale la pena provare comunque.

John Rennie.

---- 8 <----

Vedi http://www.ratsauce.co.uk/notablog/LongFilenames.asp per le mie divagazioni su nomi di file lunghi.

Non conosco alcun modo per ottenere il prefisso \\? \ Su Cygwin, e ovviamente l'attuale versione di Cygwin non usa il prefisso internamente. Presumibilmente lo stanno affrontando nella nuova versione ed è per questo che supporterà nomi più lunghi di 260 caratteri. Uso Cygwin rsync ovunque, quindi come te aspetto con impazienza il rilascio.

Ci sono altri problemi con Cygwin rsync. Crea un caos di ACL a meno che non specifichi cygwin = nontsec e tende a rimanere su directory molto grandi. Nel mio elenco di cose da fare prima di morire è scrivere una versione nativa di Windows di rsync che non avrà questi problemi. Credo che sia stato fatto, ma solo come versioni commerciali non di dominio pubblico.

JR


Rsync sembra bloccarsi su directory di grandi dimensioni perché deve prima leggere tutti i file. Il problema è che Windows legge prima tutti i file, quindi si avvia rsync. Potrebbero essere necessari alcuni minuti per eseguire la scansione della directory in base al numero di file presenti.
Ryaner,

Questo non è più il caso di rsync 3.0. Ora invia un elenco di file incrementale in modo da poter iniziare a inviare i file prima.
James Sneeringer,

2

Ti suggerirei di provare Unison http://www.cis.upenn.edu/~bcpierce/unison/

È un'alternativa molto interessante a rsync perché può anche fornire la sincronizzazione bidirezionale (cosa che rsync non è in grado di fare). L'ho già usato con successo su 2 macchine virtuali ed ero molto soddisfatto dei risultati.

Ma per quanto riguarda il nome del file, non so se funziona come vuoi.

Dal sito ufficiale:

Unison è uno strumento di sincronizzazione dei file per Unix e Windows. Consente a due repliche di una raccolta di file e directory di essere memorizzate su host diversi (o dischi diversi sullo stesso host), modificate separatamente e quindi aggiornate propagando le modifiche in ciascuna replica all'altra.


L'hai usato con percorsi più lunghi di 250 caratteri? Sembra che l'unico modo per ottenerlo su Windows sia tramite Cygwin, che credo significhi che avrà lo stesso identico problema che sto riscontrando con Cygwin rsync.
Zoredache,

Non ho testato un percorso lungo, ma i binari Unison per Windows sono creati usando cygwin.dll (è fornito in bundle con i binari, non è necessario installare cygwin), quindi potrebbe funzionare correttamente. Provalo :)
Olivier Jaquemet il

2

Solo una nota che ho riscontrato lo stesso problema (limitazioni di cygwin precedente alla 1.7) e ho trovato una build funzionante di cwrsync con cygwin 1.7 qui:

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

(Link originale trovato dai forum cwrsync)

Non esattamente una build ufficiale, ma ha risolto i miei problemi relativi ai set di caratteri :)


1

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

http://www.okisoft.co.jp/esc/utf8-cygwin/ Ha uno strato UTF8, che ha un effetto collaterale di aumentare le possibili dimensioni del percorso. Secondo il suo autore, se si desidera utilizzare più caratteri, è possibile aumentare la costante nella patch. Sembra ancora più hacker.

Probabilmente non è la soluzione migliore per la sincronizzazione remota, ma è una rsync di Windows che afferma di supportare nomi di file più lunghi.


Questo post mi preoccupa un po '( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "Fondamentalmente, c'è una patch di 930 righe, la maggior parte delle quali è nuova. FWICS, potrebbe non coprire tutti i luoghi in cui Unicode potrebbe essere necessaria la conversione (in particolare, l'invio di Unicode attraverso una pipe in modalità test molto probabilmente fallirà in modo spettacolare) "
Zoredache

0

Quindi, se gli strumenti non funzionano su Windows, c'è un modo per usare lo strumento Linux?

Con ssh - sshfs ?

Senza SSH: utilizzare una VPN e montare come SMB?

In entrambi i casi ti permetterebbe di usare il client rsync Linux più capace contro un filesystem. Non l'ho fatto con 10 GB di dati, quindi YMMV. :)


Sto cercando di estrarre i file da Windows nel mio box Linux. Inoltre, non voglio davvero creare un archivio poiché sto parlando di molti dati da 10 GB + che voglio sincronizzare settimanalmente. Se creo un archivio non otterrò il vantaggio di aggiornamenti incrementali.
Zoredache,

OK, risposta rivista.
Cawflands,

0

Questo non farà grandi strutture di file, ma per insiemi di dati relativamente piccoli con nomi lunghi potresti usare qualcosa come 7-Zip per creare un archivio che rsync potrebbe quindi trasferire. Hai detto che devi trasferire i dati dai server Windows a un server Linux. Se si dispone dell'accesso alla shell, archiviare i dati necessari in un contenitore (7-zip) per trasferire il contenitore ed espanderlo quando arriva al server. Questo porta il problema del nome di file lungo nell'archiviatore, per il quale credo che ci sia un supporto migliore e strumenti non Cygwin.


0

Per non perdere la portabilità, ti consiglio di rimanere con rsync e provare a risolvere la limitazione 255. Questa limitazione non è più all'interno di Windows ed è nel codice RSYNC - in effetti il ​​limite su Windows è ora intorno al 2048 (se ricordo bene).

Sono abbastanza sicuro che non ci siano porte rsync diverse da quelle specificate da te e ti suggerisco di utilizzare la versione di prova e segnalare eventuali bug che potresti trovare.

Se non ti dispiace usare FTP, potresti provare LFTP: ha un'ottima funzionalità di mirroring ma non si confronta con rsync quando si tratta di backup / sincronizzazione.


0

Ho hackerato insieme uno script che può rinominare temporaneamente file o directory con nomi più brevi in ​​modo che rsync (e altri programmi) possano procedere. Puoi usarlo come parte della catena di strumenti che stai usando per copiare file da Linux a Windows (rsync o altro). Non so cosa intendi con "insolito", quindi forse questo affronta solo una parte delle tue esigenze. Per favore fatemi sapere se è utile per voi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.