Windows rsync que suporta nomes de arquivos longos ou uma boa alternativa?

13

Atualmente, faço o rsync em um host Linux para copiar coisas do Windows para minha caixa Linux. Mas não consigo copiar arquivos com nomes longos.

Eu tentei DeltaCopy , cwrsync e cygwin . Pelo que descobri lá, todas essas ferramentas se recusam a copiar arquivos quando o tamanho do arquivo é longo, isso parece estar em torno de 255 caracteres.

Esse problema é tratado nos fóruns do cwrsync aqui e, supostamente, pode ser corrigido em algum momento no futuro sempre que o cygwin 1.7 for lançado e o UTF8 for suportado. Existe até uma compilação de teste aqui .

Não estou particularmente confortável usando o teste construído em um sistema de produção. Espero que alguém conheça outra opção rsync.

Como alternativa ao rsync, você conhece outra ferramenta na qual eu posso copiar uma estrutura de diretórios no Linux de um host do Windows que não terá problemas com arquivos longos ou com nomes incomuns? O importante é que preciso de uma ferramenta que possa funcionar facilmente em um túnel SSH. Alguns dos sistemas estão além dos firewalls e acredito que o SSH é o túnel que posso usar.

Zoredache
fonte
Para sua informação, o cwrsync lançou uma atualização baseada no cygwin 1.7 que suporta nomes de arquivos longos! itefix.no/i2/node/12070
Zoredache

Respostas:

6

Talvez eu esteja perdendo o ponto, mas você já pensou em usar o Robocopy no Windows. É semelhante ao RSync, mas você não pode agendá-lo diretamente do aplicativo.

Isso pode ser superado gravando um arquivo em lotes para a cópia e criando uma tarefa agendada. Robocopy é gratuito e extremamente robusto. Costumo usá-lo para copiar arquivos entre Linux e Windows usando o Samba e a rede, e a capacidade de retomar do Robocopy é realmente poderosa.

BinaryMisfit
fonte
robocopy é uma opção que venho considerando, mas opera na direção errada (do win para o lin), eu queria usar o windows no Linux. Suspeito que talvez tenha que seguir essa direção se não encontrar nada melhor.
Zoredache
5

Aha! Você pode usar subst com rsync.

Se você possui uma árvore de diretórios profunda d: \ very \ long \ file \ n \ ame \ etc \ etc, o experimento revela que você pode substituir X: a d: \ very \ long \ file \ name \ etc e depois sincronizar novamente com e de / cygdrive / x / qualquer coisa. Isso funciona tanto no cliente quanto no servidor.

Agora, enquanto você pode usar substs estratégicos para reduzir o tamanho dos nomes de arquivos, não sei se isso permite que você ignore o limite de 260 caracteres. Também pode não ser muito conveniente. Vale a pena tentar.

John Rennie.

---- 8 <----

Veja http://www.ratsauce.co.uk/notablog/LongFilenames.asp para minhas divagações sobre nomes de arquivos longos.

Não conheço nenhuma maneira de obter o prefixo \\? \ No Cygwin e, obviamente, a versão atual do Cygwin não usa o prefixo internamente. Presumivelmente, eles estão abordando isso na nova versão e é por isso que ele suporta nomes com mais de 260 caracteres. Eu uso o Cygwin rsync em todo o lugar, assim como você, espero ansiosamente pelo lançamento.

Existem outros problemas com o Cygwin rsync. Ele cria uma confusão de ACLs, a menos que você especifique cygwin = nontsec, e tende a travar em diretórios muito grandes. Na minha lista de coisas a fazer antes de morrer, escrevo uma versão nativa do Windows do rsync que não terá esses problemas. Acredito que isso tenha sido feito, mas apenas como versões comerciais e não de domínio público.

JR

John Rennie
fonte
O Rsync parece travar em diretórios grandes porque precisa ler todos os arquivos primeiro. O problema é que o Windows lê todos os arquivos primeiro e depois o rsync entra em ação. Pode levar algumas janelas para verificar o diretório, dependendo de quantos arquivos existem.
Ryaner
Este não é mais o caso do rsync 3.0. Agora ele envia uma lista de arquivos incremental para poder começar a enviar arquivos mais rapidamente.
James Sneeringer
2

Eu sugiro que você tente o Unison http://www.cis.upenn.edu/~bcpierce/unison/

É uma alternativa muito interessante ao rsync porque também pode fornecer sincronização bidirecional (que o rsync não pode fazer). Eu já o usei com sucesso em duas máquinas virtuais e fiquei muito feliz com os resultados.

Mas, no que diz respeito ao nome do arquivo, não sei se funciona como você deseja.

Do site oficial:

Unison é uma ferramenta de sincronização de arquivos para Unix e Windows. Ele permite que duas réplicas de uma coleção de arquivos e diretórios sejam armazenadas em hosts diferentes (ou discos diferentes no mesmo host), modificadas separadamente e atualizadas, propagando as alterações em cada réplica para a outra.

Olivier Jaquemet
fonte
Você o usou com caminhos com mais de 250 caracteres? Parece que a única maneira de obtê-lo no Windows é via cygwin, o que acredito significa que ele terá exatamente o mesmo problema que estou tendo com o cygwin rsync.
Zoredache
Não testei o caminho longo, mas os binários Unison para Windows são criados usando o cygwin.dll (ele vem junto com os binários, não é necessário instalar o cygwin), portanto, pode funcionar corretamente. Experimente :)
Olivier Jaquemet
2

Apenas uma observação de que encontrei o mesmo problema (limitações do cygwin pré-1.7) e encontrei uma compilação funcional do cwrsync com o cygwin 1.7 aqui:

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

(Link original encontrado nos fóruns do cwrsync)

Não é exatamente uma compilação oficial, mas resolveu meus problemas de charset :)


fonte
1

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

http://www.okisoft.co.jp/esc/utf8-cygwin/ Possui uma camada UTF8, que tem um efeito colateral de aumentar o tamanho do caminho possível. Segundo o autor, se você quiser usar mais caracteres, poderá aumentar a constante no patch. Isso parece ainda mais imprudente.

Provavelmente não é sua melhor aposta para sincronização remota, mas é um rsync do Windows que alega suporte a nomes de arquivos mais longos.

redblacktree
fonte
Este post me preocupa um pouco ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "Basicamente, há um patch de 930 linhas, a maioria dos quais é novo. FWICS, ele pode não cobrir todos os lugares onde o Unicode conversão pode ser necessário (em particular, o envio de Unicode através de um tubo textmode, muito provavelmente, falhar espetacularmente)"
Zoredache
0

Então, se as ferramentas são ruins no Windows, existe uma maneira de usar a ferramenta Linux?

Com ssh - sshfs ?

Sem ssh - use uma VPN e monte como SMB?

De qualquer maneira, você poderá usar o cliente rsync Linux mais capaz em um sistema de arquivos. Eu não fiz isso com 10 GB de dados, então YMMV. :)

Cawflands
fonte
Estou tentando extrair arquivos do Windows para minha caixa do Linux. Além disso, eu realmente não quero criar um arquivo, pois estou falando de muitos dados com mais de 10 GB que quero sincronizar semanalmente. Se eu construir um arquivo, não terei o benefício de atualizações incrementais.
Zoredache
OK, resposta revisada.
Cawflands
0

Isso não cria estruturas de arquivos grandes, mas para conjuntos de dados relativamente pequenos com nomes longos, você pode usar algo como 7-Zip para criar um arquivo que o rsync poderia transferir. Você disse que precisa extrair dados dos servidores Windows para um servidor Linux. Se você tiver acesso ao shell, arquive os dados necessários em um contêiner (7-zip), transfira o contêiner e expanda-o quando chegar ao servidor. Isso empurra o problema do nome do arquivo longo para o arquivador, para o qual acredito que há um melhor suporte e ferramentas não Cygwin.

sysadmin1138
fonte
0

Para não perder a portabilidade, recomendo que você permaneça com o rsync e tente resolver a limitação 255. Essa limitação não está mais no Windows e está no código RSYNC - na verdade, o limite no Windows está em torno de 2048 agora (se bem me lembro).

Tenho certeza de que não há outras portas rsync além das especificadas por você e sugiro que você use a versão de teste e relate quaisquer erros que possa encontrar.

Se você não se importa em usar o FTP, pode tentar o LFTP - ele possui um recurso de espelhamento muito bom, mas não se compara ao rsync quando se trata de backup / sincronização.

sorin
fonte
0

Eu cortei um script que pode renomear temporariamente arquivos ou diretórios com nomes mais curtos para que o rsync (e outros programas) possa continuar. Você pode usar isso como parte da cadeia de ferramentas que está usando para copiar arquivos do Linux para o Windows (rsync ou outro). Não sei o que você quer dizer com "incomum"; talvez isso atenda apenas uma parte de seus requisitos. Informe-me se for útil para você.

taltman
fonte