Sincronizza una directory locale con una directory remota in Linux


14

Ho una cartella con alcuni file e un po 'di spazio su un server web. Voglio fare una sincronizzazione bidirezionale tra la cartella locale e quella remota in Linux, proprio al momento della modifica. Come faccio a fare questo? btw non riesco a installare nulla sul server, a tutti gli effetti è solo spazio.

Nota: ho già impostato le coppie di chiavi rsa, in modo che possa accadere in silenzio.

Risposte:


12

Lo strumento preferito per la sincronizzazione unidirezionale è rsync e lo strumento preferito per la sincronizzazione bidirezionale è Unison . Entrambi richiedono che l'eseguibile sia disponibile su entrambi i lati. Se è possibile eseguire un file eseguibile sul lato server, eliminare il file binario all'unisono e renderlo eseguibile.

Se hai Linux, * BSD, Solaris o Mac OS X localmente, puoi probabilmente usare un filesystem FUSE per far apparire lo spazio del server web come un filesystem locale - sshfs dovrebbe funzionare poiché sembra che tu abbia accesso ssh. Quindi utilizzare l'unisono "localmente".

Si noti inoltre che la maggior parte dei software di controllo della versione (CVS / Subversion e VCS distribuito) hanno la sincronizzazione come funzionalità secondaria (check in su una macchina e out sull'altra).


4

Se è installato sul server, usa rsyncbuild per esattamente quel lavoro.

Per farlo bidirezionale, fai questo (citazione da http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):

Per sincronizzare in modo bidirezionale di una directory /src/foosu hostAper /dest/fooil hostB, comprese tutte le sotto-directory, si dovrebbe eseguire questi comandi su hostA:

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

Il primo comando spinge tutti i file che sono più recenti su hostAa hostB.

Il secondo comando tirerà tutti i file che sono più recenti su hostBa hostA. Le opzioni critiche sono:

durante la copia, è necessario preservare i tempi di modifica dei file. -afa questa e altre cose;

Se vuoi conservare solo i tempi di modifica, usa -tinvece.

Per saltare tutti i file più recenti sulla destinazione: -ufarlo.


per quanto ho letto rsync non funziona in modo bidirezionale e quando provo mi dà l'errore "disadattamento della versione del protocollo - la tua shell è pulita?"
Andrew Redd,

hostanswers.net/linux-hosting/rsync-protocol-version-mismatch potrebbe aiutarti a risolvere il problema di mancata corrispondenza della versione. Per la cosa bidirezionale ho aggiornato la mia risposta.
tante

1
Rsync non è affatto adattato alla sincronizzazione bidirezionale. Per prima cosa non ti avvertirà se c'è un conflitto. Usa invece Unison, è lo strumento giusto per il lavoro.
Gilles 'SO- smetti di essere malvagio' il

1
Ciò si interrompe in modo orribile se il server A è in futuro dal server B. Nel mio caso, sono 13 ore avanti rispetto al server remoto.
Tim Post

1

Ogni volta che hai bisogno di una sincronizzazione tra due cartelle rsyncè un'ottima scelta flessibile. Il problema è che rsync non supporterà il protocollo ftp. Una bella soluzione per questo è curlFtpFS :

CurlFtpFS è un filesystem per l'accesso agli host FTP basato su FUSE e libcurl.

Con curlFtpFs è abbastanza facile includere una cartella ftp remota nel filesystem.

Questo è un breve esempio che mostra l'uso di entrambi gli strumenti:

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

Leggi la manpage per ulteriori informazioni.

Se non vuoi un tale sforzo per installare curlFtpFS e vuoi solo mantenere alcuni file sincronizzati, ci sono molti strumenti ftp che offrono tali funzionalità di sincronizzazione:

  • FTPSync.pl - semplice script PERL per mantenere sincronizzate una directory locale e una remota
  • weex - un client FTP non interattivo per l'aggiornamento di pagine Web
  • filezilla - Client FTP GUI con molte funzionalità
  • ...

1. Rsync non va bene per la sincronizzazione bidirezionale , usa invece Unison. 2. Da dove proviene FTP? la menzione delle chiavi RSA nella domanda suggerisce piuttosto ssh (e quindi sshfs).
Gilles 'SO- smetti di essere malvagio' il

Hai ragione, FTP non è menzionato nella domanda. Ad essere sincero, penso che fosse una combinazione di "spazio web" e "è solo spazio". e un po 'della mia stanchezza ieri.
echox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.