web-dev-qa-db-ja.com

Linuxでローカルディレクトリをリモートディレクトリと同期する

いくつかのファイルが含まれているフォルダと、Webサーバー上のスペースがあります。変更時だけに、Linuxでローカルフォルダーとリモートフォルダーの間で双方向同期を実行したいと考えています。どうすればよいですか?ところで、サーバーには何もインストールできません。すべての意図と目的のために、それは単なるスペースです。

注:サイレントで実行できるように、すでにrsa鍵ペアが設定されています。

14
Andrew Redd

単方向同期に適したツールは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がこれを行います。

4
tante

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ツールがたくさんあります。

  • FTPSync.pl -ローカルディレクトリとリモートディレクトリの同期を維持する単純なPerlスクリプト
  • weex -Webページを更新するための非対話型FTPクライアント
  • filezilla -多くの機能を備えたGUI FTPクライアント
  • ...
1
echox