RSync:両方向に同期するにはどうすればよいですか?


82

rsyncを使用して2つのディレクトリを両方向に同期させたい。

私は古典的な意味で同期を参照します(rsyncマニュアルでの意味ではありません):どちら新しいかに応じて
、ディレクトリを両方向に更新したいと思います。

これはrsyncで実行できますか(Linuxの方法で推奨されます
そうでない場合、他にどのような解決策がありますか?


3
私は中にいることを信じているserverfault.comあなたがより良い答えを得るでしょう。
エステバンKüber

回答:


77

「新しい」モード(-uまたは--updateフラグ)に加えて-t(ファイルの変更時刻をコピーするため)、-r(再帰フォルダーの場合)、および-v(詳細な出力でそれが何であるかを確認するため)を使用して、2回実行するだけです。やっている):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

これは削除を処理しませんが、定期的な同期のみでその問題の良い解決策があるかどうかはわかりません。


3
質問はrsyncに関するものだったので、この回答を正解としてマークします。
java.is.for.desktop 2009年

2
しかし、あなたは他の解決策についても尋ねました、そしてユニゾンはより良い仕事をします、さもなければ私は他のツールについて決して言及しませんでした。rsyncの使用を支持する特定の状況があることを理解しています。
maD70 2009年

1
シーシュ、あなたは6つの賛成票を獲得しました、そしてあなたはまだ不平を言っていますか?<j / k>ユニゾンは本当に興味深い解決策です。あなたがそれを言ってくれてうれしいです。:)
jsight 2009年

2
まあ、私は文句を言っていません、私は説明しています。私が何かを見逃していないことを確認するだけです(英語を母国語としない)。
maD70 2009年

1
MaD70-問題ありません...冗談でした。:)
jsight 2009年

63

ユニゾンファイルシンクロナイザーを知っていますか?

Unisonは、UnixおよびWindows用のファイル同期ツールです。これにより、ファイルとディレクトリのコレクションの2つのレプリカを異なるホスト(または同じホスト上の異なるディスク)に保存し、別々に変更してから、各レプリカの変更を他のレプリカに伝達することで最新の状態にすることができます。..。

また、障害に対して回復力があることにも注意してください。

ユニゾンは失敗に対して回復力があります。異常終了や通信障害が発生した場合でも、レプリカとそれ自体のプライベート構造を常に適切な状態に保つように注意してください。


2
+1。ユニゾンはこれを行うための最良の方法です。Double-rsyncは正しく理解するのが難しく、削除をまったく処理しません。
avdi 2009年

はい、ユニゾンは障害に強いです。私はこれを強調するために私の答えを更新しています。
maD70 2009年

4
ユニゾンのことは聞いたことがありません。あなたは私に今日自宅でバックアップスクリプトをやり直させる責任があります。
エステバンKüber

1
私の答えがとても役に立ったことをうれしく思います(これは、健全な理論的基盤に基づいたツールがいかに実用的であるかを示しています)。
maD70 2009年

これは、linuxjournalでのUnisonの短いチュートリアルです。
lepe 2014

12

rsync2回実行する必要があり、次のコマンドで実行することをお勧めします-au

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a(アーカイブ用)は次のショートカットです-rlptgoD

  • -r サブディレクトリに再帰する
  • -l シンボリックリンクも同期する
  • -p また、ファイルのアクセス許可を同期します
  • -t また、ファイルの変更時間を同期します
  • -g また、ファイルグループを同期します
  • -o また、ファイル所有者を同期します
  • -D また、特別な(通常/メタではない)ファイルを同期します

基本的に、を使用して同一の1対1のコピーを作成するrsync場合は常に-a、「同期」について話すときにほとんどのユーザーが期待することを使用する必要があります。ここでの他の回答は、ファイルの内容が変更されないままであるが、所有者が変更されているか、アクセス許可が変更されている可能性があり、その場合rsync、致命的となる可能性のあるファイルを同期しないことを見逃しているようです。

しかし、あなたはまた、必要に-uそれが告げるとrsync、それは先にすでに存在していて、新しい最終更新日時を有する場合には完全に単独で任意のファイル/フォルダを残すこと。ファイル/フォルダが新しいかどうかに関係なく、なしで-u rsync同期されます

このソリューションは削除されたファイルを処理できないことに注意してください。次の状況を考慮すると、削除の処理は簡単にはできません。ファイルがソースで削除されたrsync場合、そのファイルが一度存在して削除されたかどうか(その場合は、宛先でも削除する必要があります)、またはソースには存在しませんでした(その場合、宛先からコピーする必要があります)。これらの2つの状況は同じように見えるためrsync、正しく反応する方法を知ることができません。同じ状況につながる可能性があるため、逆の方法で同期することは役に立ちません。ファイルはソースに存在しますが、宛先には存在しません。どうして?宛先に存在したことはありませんか、それとも削除されましたか?どちらの場合もrsync。と同じように見えます。

削除されたファイルを確実に同期できる同期ツールは、通常、過去のすべての同期操作に関する同期ログを管理します。そのログで、かつてファイルがあり、同期されていたが、現在は欠落していることが明らかになった場合、そのファイルが削除されたことは明らかです。ログによると、そのようなファイルがなかった場合は、同期する必要があります。すべてのログエントリをタイムスタンプ付きで保存することにより、削除されたファイルが戻ってきて何度も削除される可能性もありますが、同期ツールは常に何をすべきかを認識し、結果は常に正しいものです。rsyncそのようなログはなく、操作の両側の現在のファイル状態のみに依存します。

ただし、rsync上記の同期ツールにすでに非常に近いPOSIXシェルスクリプトを使用して、同期コマンドを自分で作成することはできます。私はそのようなツールを自分で必要としていたので、ここにそのようなスクリプトの作成をガイドするStackoverflowに関する回答があります


美しく置く。
Peter Rowntree

6

ありがとうjsight

rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

これにより、最初の同期が終了した直後に2番目の同期が発生します。ディレクトリ構造が巨大な場合、PCの前に座る必要がないため、時間を節約できます。構造が巨大な場合は、冗長で進行中のものを削除します

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a

1
ファイルの変更時刻をコピーするために-tを追加する必要があるかどうか疑問に思っています。-tを省略すべき理由はありますか?
chrips 2018年

@Chripsいいえ、そうは思いません。この回答の目的は&&、2つのコマンド間を使用して、手動で次々に実行するのではなく、1番目のコマンドの直後に2番目のコマンドを自動的に実行できることを示すことだけだったようです(最初のコマンドが成功した場合)。 @jsightの答えで。また、@ jsightの回答は-t、この回答が投稿された後にオプションを含むように編集されたと思います。
ruben99 2219年

1

使用する rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

例えば:

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

xxxファイルをdifferent-stuff / xxx-filesに同期します。different-stuff/ xxx-filesが存在しなかった場合は、作成します。つまり、コピーします。

-pogtEtv -ファイルのメタデータを保持するための一連のオプションに加えて、v-詳細およびr-再帰

--progress -同期の進行状況をリアルタイムで表示します-大きなファイルをコピーする場合に非常に便利です

--bwlimit=2000 -コピー/同期の最大速度を設定します(bw =帯域幅)

PS rsyncは、ローカルマシンの場合、cpなどのコマンドを使用できるネットワーク経由で作業する場合に非常に重要です。

幸運を!


0

で使用rsyncしていinotifywaitます。ファイルを変更するrsyncと、が実行されます。

inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"

inotifywait両方のホストで実行する必要があります。inotifywaitの例を確認してください


0

必要なのはRcloneです。Rclone( "rsync for cloud storage")は、さまざまなクラウドストレージプロバイダー(box、dropbox、ftpなど)やローカルファイルシステムとの間でファイルやディレクトリを同期するためのコマンドラインLinuxプログラムです。Rloneはミラー同期のみをサポートします。

リアルタイム同期を含むもう1つのよりグラフィカルなソリューションは、プログラムRealTimeSyncを含むFreeFileSyncを使用することです。FreefileSyncは、削除の処理を含む双方向の双方向同期をサポートします。

FreFileSync gui

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.