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.

Andrew Redd
fonte

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).

Gilles 'SO- parar de ser mau'
fonte
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.

tante
fonte
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
  • ...
echox
fonte
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