rsyncを使用して2つのディレクトリを両方向に同期させたい。
私は古典的な意味で同期を参照します(rsyncマニュアルでの意味ではありません):どちらが新しいかに応じて
、ディレクトリを両方向に更新したいと思います。
これはrsyncで実行できますか(Linuxの方法で推奨されます)?
そうでない場合、他にどのような解決策がありますか?
rsyncを使用して2つのディレクトリを両方向に同期させたい。
私は古典的な意味で同期を参照します(rsyncマニュアルでの意味ではありません):どちらが新しいかに応じて
、ディレクトリを両方向に更新したいと思います。
これはrsyncで実行できますか(Linuxの方法で推奨されます)?
そうでない場合、他にどのような解決策がありますか?
回答:
「新しい」モード(-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
これは削除を処理しませんが、定期的な同期のみでその問題の良い解決策があるかどうかはわかりません。
ユニゾンファイルシンクロナイザーを知っていますか?
Unisonは、UnixおよびWindows用のファイル同期ツールです。これにより、ファイルとディレクトリのコレクションの2つのレプリカを異なるホスト(または同じホスト上の異なるディスク)に保存し、別々に変更してから、各レプリカの変更を他のレプリカに伝達することで最新の状態にすることができます。..。
また、障害に対して回復力があることにも注意してください。
ユニゾンは失敗に対して回復力があります。異常終了や通信障害が発生した場合でも、レプリカとそれ自体のプライベート構造を常に適切な状態に保つように注意してください。
rsync
2回実行する必要があり、次のコマンドで実行することをお勧めします-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に関する回答があります。
ありがとう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
&&
、2つのコマンド間を使用して、手動で次々に実行するのではなく、1番目のコマンドの直後に2番目のコマンドを自動的に実行できることを示すことだけだったようです(最初のコマンドが成功した場合)。 @jsightの答えで。また、@ jsightの回答は-t
、この回答が投稿された後にオプションを含むように編集されたと思います。
使用する 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などのコマンドを使用できるネットワーク経由で作業する場合に非常に重要です。
幸運を!
で使用rsync
していinotifywait
ます。ファイルを変更するrsync
と、が実行されます。
inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"
inotifywait
両方のホストで実行する必要があります。inotifywaitの例を確認してください
必要なのはRcloneです。Rclone( "rsync for cloud storage")は、さまざまなクラウドストレージプロバイダー(box、dropbox、ftpなど)やローカルファイルシステムとの間でファイルやディレクトリを同期するためのコマンドラインLinuxプログラムです。Rloneはミラー同期のみをサポートします。
リアルタイム同期を含むもう1つのよりグラフィカルなソリューションは、プログラムRealTimeSyncを含むFreeFileSyncを使用することです。FreefileSyncは、削除の処理を含む双方向の双方向同期をサポートします。