web-dev-qa-db-ja.com

rsyncによる双方向同期

Rsyncで双方向または双方向の同期をセットアップしようとしています。私の場合、ファイルを削除する必要があるのは、BからAに同期するときだけです。そのため、次のようにrsyncを2回実行することを考えていました。

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

このソリューションのこの問題は、rsync(A-B)を実行した直後にrsync(B-> A)を実行すると、同期の間に作成された新しいファイルもすべて削除されることです。

この日時より前に作成された場合にのみファイルを削除するという条件としてタイムスタンプを指定できる方法はありますか?.

更新しました:

ユニゾンソリューションがあることを理解していますが、ユニゾンの問題は両端にインストールする必要があります。リモートサーバーと同期していますが、リモートエンドにunisonをインストールできません。

11
Raza

あなたはまさにこのタスクのために設計されたosyncを試すことができます。仕事をするためにrsyncコマンドの複雑なシーケンスを一度設定しましたが、今はosyncを使用しています。

https://github.com/deajan/osync

内部でrsyncを使用するため、rsyncを使用できるあらゆる状況に適しています。

4
Mark Perryman

rsyncは、発生した正確な理由により、このタスクには不適切なツールです。代わりに、 unison の使用を検討してください:

unison A/ B/

これを初めて実行すると、Aに一意にあるファイルとBに一意にあるファイルが識別されます。また、両方の場所にあるものにフラグを付け、どちらを上書きするかを特定するように求めます。

次回これを実行すると、AからBへの変更とBからAへの変更がコピーされ、両方の場所で変更されたファイルにフラグが付けられます手動で解決します。

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

unisonで使用できる便利なフラグがいくつかあります。これらは、仮定を定義することでプロセスを自動化し、それにより同期中に尋ねられる質問の数を減らすのに役立ちます。

7
roaima

本当に必要なのは Rclone です。 Rcloneは、クラウドストレージ(ボックス、ドロップボックス、ネクストクラウド、ftpなど)とローカルストレージのrsyncです。

0
user1461607