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

13

Eu tenho uma pasta com alguns arquivos e algum espaço em um servidor da 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 eu não posso instalar qualquer coisa no servidor, para todos os efeitos, é apenas espaço.

Nota: Eu já tenho o conjunto de pares de chaves rsa, para que isso possa acontecer silenciosamente.

    
por Andrew Redd 30.09.2010 / 00:07

3 respostas

12

A ferramenta escolhida para a sincronização unidirecional é o rsync, e a ferramenta escolhida para a sincronização bidirecional é Unison . Ambos exigem que o executável esteja disponível em ambos os lados. Se você puder tornar um arquivo executável no lado do servidor, elimine o binário uníssono e torne-o executável.

Se você tem Linux, * BSD, Solaris ou Mac OS X localmente, provavelmente é possível usar um sistema de arquivos FUSE para tornar a web o espaço do servidor aparece como um sistema de arquivos local - o sshfs deve funcionar, uma vez que você parece ter acesso ssh. Em seguida, use o uníssono "localmente".

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

    
por 30.09.2010 / 00:39
4

Se ele estiver instalado no servidor, use rsync para o mesmo trabalho.

Para obter isso bidirecional, faça isso (citação de link ):

Para sincronizar bidirecionalmente um diretório /src/foo on hostA to /dest/foo on hostB , incluindo todos os subdiretórios, você executaria esses comandos em hostA :

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

O primeiro comando envia todos os arquivos que são mais recentes em hostA to hostB .

O segundo comando extrairá todos os arquivos mais recentes em hostB to hostA . o opções críticas são:

ao copiar, você deve preservar os tempos de modificação de arquivos. -a faz isso e outras coisas;

Se você quiser preservar apenas os horários de modificação, use -t .

Para pular todos os arquivos mais recentes no destino: -u faz isso.

    
por 30.09.2010 / 00:12
1

Sempre que 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 is a filesystem for accessing FTP hosts based on FUSE and 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 manpage para mais informações.

Se você não quiser que esse esforço instale o curlFtpFS e apenas deseje manter alguns arquivos em sincronia, há muitas ferramentas de ftp que oferecem esses recursos de sincronização:

  • FTPSync.pl - script PERL simples para manter um diretório local e remoto em sincronia
  • weex - um cliente FTP não interativo para atualizar páginas da web
  • filezilla - Cliente FTP da GUI com muitos recursos
  • ...
por 30.09.2010 / 00:30