Tenho uma pasta com alguns arquivos e algum espaço em um servidor da web. 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, então isso pode acontecer silenciosamente.
A ferramenta de escolha para sincronização unidirecional é rsync, e a ferramenta de escolha para sincronização bidirecional é nison . Ambos exigem que o executável esteja disponível em ambos os lados. Se você pode tornar um arquivo executável no lado do servidor, elimine o binário unison e torne-o executável.
Se você tem Linux, * BSD, Solaris ou Mac OS X localmente, provavelmente pode usar um sistema de arquivos Fuse para fazer o espaço do servidor web aparecer como um sistema de arquivos local - sshfs deve funcionar já 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, bem como VCS distribuído) tem a sincronização como um recurso by-the-way (check-in em uma máquina e check-out na outra).
Se estiver instalado no servidor, use rsync
é construído exatamente para esse trabalho.
Para obtê-lo bidirecional, faça isso (citação de http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):
Para sincronizar bidirecionalmente um diretório /src/foo
em hostA
a /dest/foo
em hostB
, incluindo todos os subdiretórios, você executaria estes comandos em hostA
:
rsync -auz /src/foo hostB:/dest
rsync -auz hostB:/dest/foo /src
O primeiro comando envia todos os arquivos mais novos em hostA
para hostB
.
O segundo comando irá puxar todos os arquivos que são mais novos em hostB
para hostA
. As opções críticas são:
ao copiar, você deve preservar os tempos de modificação do arquivo. -a
faz isso e outras coisas;
Se você quiser preservar apenas os tempos de modificação, use -t
em vez de.
Para pular quaisquer arquivos mais recentes no destino: -u
faz isso.
Cada vez que você precisa de uma sincronização entre duas pastas, rsync
é uma grande escolha 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 baseado em Fuse e libcurl.
Com curlFtpFs muito fácil incluir uma pasta ftp remota em 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 quiser tanto esforço para instalar o curlFtpFS e quiser apenas manter alguns arquivos sincronizados, existem várias ferramentas de ftp que oferecem esses recursos de sincronização: