Sincronizar um diretório local com um diretório remoto no Linux


14

Eu tenho uma pasta com alguns arquivos e algum espaço em um servidor web. Eu quero fazer uma sincronização bidirecional entre a pasta local e a remota no linux, apenas na hora da modificação. Como eu faço isso? btw Não consigo instalar nada no servidor, para todos os efeitos, é apenas espaço.

Nota: Eu já tenho pares de chaves rsa configurados, para que isso ocorra silenciosamente.

Respostas:


12

A ferramenta de escolha para sincronização unidirecional é o rsync, e a ferramenta de escolha para sincronização bidirecional é o Unison . Ambos exigem que o executável esteja disponível nos dois lados. Se você pode tornar um arquivo executável no lado do servidor, descarte o binário uníssono e torne-o executável.

Se você possui Linux, * BSD, Solaris ou Mac OS X localmente, provavelmente pode usar um sistema de arquivos FUSE para fazer com que o espaço do servidor da Web apareça como um sistema de arquivos local - o sshfs deve funcionar, pois você parece ter acesso ssh. Em seguida, use uníssono "localmente".

Observe também que a maioria dos softwares de controle de versão (CVS / Subversion, bem como VCS distribuído) tem sincronização como um recurso a propósito (faça check-in em uma máquina e saia na outra).


4

Se estiver instalado no servidor, use rsyncsua compilação exatamente para esse trabalho.

Para obter uma orientação bidirecional, faça isso (citação de http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):

Para bidirectionally sincronizar um diretório /src/fooem hostAque /dest/fooem hostB, incluindo todos os sub-diretórios, você deve executar esses comandos em hostA:

rsync -auz /src/foo hostB:/dest 
rsync -auz hostB:/dest/foo /src

O primeiro comando envia todos os arquivos mais recentes hostApara hostB.

O segundo comando vai puxar todos os arquivos que são mais recentes sobre hostBa hostA. As opções críticas são:

ao copiar, você deve preservar os tempos de modificação do arquivo. -afaz isso e outras coisas;

Se você deseja preservar apenas os tempos de modificação, use-o -t.

Para pular os arquivos mais recentes no destino: -ufaça isso.


pelo que li, o rsync não é bidirecional e, quando tento, gera o erro "incompatibilidade de versão do protocolo - seu shell está limpo?"
Andrew Redd

hostanswers.net/linux-hosting/rsync-protocol-version-mismatch pode ajudar a corrigir o problema de incompatibilidade de versão. Para a coisa bidirecional, atualizei minha resposta.
tante

1
O Rsync não está adaptado à sincronização bidirecional. Por um lado, não irá avisá-lo se houver um conflito. Use o Unison, é a ferramenta certa para o trabalho.
Gilles 'SO- stop be evil'

1
Isso quebra horrivelmente se o servidor A estiver no futuro a partir do servidor B. No meu caso, estou 13 horas à frente do servidor remoto.
Tim Post

1

Sempre que você precisar de uma sincronização entre duas pastas, rsyncé uma ótima opção flexível. O problema é que o rsync não suporta o protocolo ftp. Uma boa solução para isso é curlFtpFS :

CurlFtpFS é um sistema de arquivos para acessar hosts FTP baseados em FUSE e libcurl.

Com o curlFtpFs, é muito fácil incluir uma pasta ftp remota no seu sistema de arquivos.

Este é um pequeno exemplo que mostra o uso de ambas as ferramentas:

curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo

Leia a página de manual para mais informações.

Se você não deseja esse esforço para instalar o curlFtpFS e apenas deseja manter alguns arquivos sincronizados, existem muitas ferramentas de ftp que oferecem esses recursos de sincronização:

  • FTPSync.pl - script PERL simples para manter sincronizado um diretório local e um remoto
  • weex - um cliente FTP não interativo para atualização de páginas da web
  • filezilla - cliente de FTP da GUI com muitos recursos
  • ...

1. Rsync não é bom para sincronização bidirecional ; use o Unison. 2. De onde veio o FTP? a menção de chaves RSA na pergunta sugere ssh (e, portanto, sshfs).
Gilles 'SO- stop be evil'

Você está certo, o FTP não é mencionado na pergunta. Para ser sincero, acho que foi uma combinação de "espaço na web" e "é apenas espaço". e um pouco do meu cansaço ontem.
echox 30/09/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.