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.
fonte
Respostas:
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.
fonte
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
fonte
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:
fonte
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
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.
fonte
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. :)
fonte
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.
fonte
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.
fonte
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ê.
fonte