いくつかのファイルを含むフォルダーと、Webサーバー上のスペースがあります。Linuxのローカルフォルダーとリモートフォルダーの間で、変更時だけに双方向の同期を行いたい。どうすればいいですか?ところで、サーバーに何もインストールすることはできません。すべての意図と目的のために、それは単なるスペースです。
注:すでにrsaキーペアが設定されているため、静かに実行できます。
いくつかのファイルを含むフォルダーと、Webサーバー上のスペースがあります。Linuxのローカルフォルダーとリモートフォルダーの間で、変更時だけに双方向の同期を行いたい。どうすればいいですか?ところで、サーバーに何もインストールすることはできません。すべての意図と目的のために、それは単なるスペースです。
注:すでにrsaキーペアが設定されているため、静かに実行できます。
回答:
単方向同期に最適なツールはrsyncであり、双方向同期に最適なツールはUnisonです。両方とも、実行可能ファイルが両側で使用可能である必要があります。サーバー側でファイルを実行可能にできる場合は、ユニゾンバイナリを削除して実行可能にします。
あなたはローカルのLinux、* BSD、SolarisまたはMacのOS Xを持っている場合は、おそらく使用することができますFUSEの -ウェブサーバスペースがローカルファイルシステムとして表示させるためにファイルシステムをsshfsのは、あなたがSSHアクセスを持っているように見えるので、動作するはずです。次に、ユニゾンを「ローカルに」使用します。
また、ほとんどのバージョン管理ソフトウェア(CVS / Subversionと分散VCS)には、同期機能があります(一方のマシンでチェックインし、他方のマシンでチェックアウトする)。
サーバーにインストールされている場合はrsync
、まさにそのジョブのためにビルドを使用します。
双方向にするには、これを行います(http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777から引用):
すべてのサブディレクトリを含むディレクトリを/src/foo
on hostA
に双方向で同期するに/dest/foo
はhostB
、次のコマンドを実行します 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ツールがたくさんあります。