いくつかのファイルが含まれているフォルダと、Webサーバー上のスペースがあります。変更時だけに、Linuxでローカルフォルダーとリモートフォルダーの間で双方向同期を実行したいと考えています。どうすればよいですか?ところで、サーバーには何もインストールできません。すべての意図と目的のために、それは単なるスペースです。
注:サイレントで実行できるように、すでにrsa鍵ペアが設定されています。
単方向同期に適したツールはrsyncで、双方向同期に適したツールは nison です。どちらも、実行可能ファイルが両側で使用できる必要があります。サーバー側でファイルを実行可能にできる場合は、unisonバイナリを削除して実行可能にします。
Linux、* BSD、Solaris、またはMac OS Xをローカルで使用している場合は、おそらく Fuse ファイルシステムを使用して、Webサーバースペースをローカルファイルシステムとして表示することができます- sshfs あなたはsshアクセスを持っているようですので動作します。次に、「ローカル」でunisonを使用します。
また、ほとんどのバージョン管理ソフトウェア(CVS/Subversionと分散VCS)には、同期機能(一方のマシンでチェックインし、もう一方のマシンでチェックアウトする)があります。
サーバーにインストールされている場合は、rsync
を使用します。これは、まさにそのジョブ用にビルドされています。
双方向で取得するには、次のようにします( http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 からの引用):
すべてのサブディレクトリを含むhostA
上の/src/foo
からhostB
上の/dest/foo
を双方向で同期するには、これらのコマンドをhostA
で実行します。 :
rsync -auz /src/foo hostB:/dest
rsync -auz hostB:/dest/foo /src
最初のコマンドは、hostA
で新しいファイルをすべてhostB
にプッシュします。
2番目のコマンドは、hostB
からhostA
に新しいファイルをすべてプルします。重要なオプションは次のとおりです。
コピーするときは、ファイルの変更時間を維持する必要があります。 -a
はこれやその他のことを行います。
変更時刻のみを保持する場合は、代わりに-t
を使用してください。
宛先で新しいファイルをスキップするには:-u
がこれを行います。
2つのフォルダー間の同期が必要になるたびに、rsync
は非常に柔軟な選択肢になります。問題は、rsyncがftpプロトコルをサポートしないことです。これの良い回避策は curlFtpFS です:
CurlFtpFSは、Fuseとlibcurlに基づくFTPホストにアクセスするためのファイルシステムです。
CurlFtpFsを使用すると、リモートFTPフォルダーをファイルシステムに含めるのがかなり簡単になります。
これは両方のツールの使用法を示す短い例です:
curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo
詳細については、マンページをお読みください。
CurlFtpFSをインストールするような努力を望まず、いくつかのファイルを同期させておきたい場合は、そのような同期機能を提供するFTPツールがたくさんあります。