1. ホーム
  2. file

[解決済み] rsyncによる双方向同期

2022-12-31 05:47:46

質問

私はa/というフォルダとA/というリモートフォルダを持っています。 私は今、Makefileでこのようなことを実行しています。

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

sync-musicを作ると、まずサーバーからローカルにすべての差分を取得し、次に逆にローカルからサーバーにすべての差分を送信します。

これは、将来的に更新や新しいファイルがある場合にのみ、非常によく機能します。削除がある場合、それは何も行いません。

rsync には --delete と --delete-after オプションがあり、私が望むことを達成するのに役立ちますが、問題は、それが 2-way-sync で動作しないことです。

ローカルファイルが削除されたときに、syn上でサーバーファイルを削除したい場合、それは動作しますが、何らかの理由(後に説明)で、サーバーに存在しないがローカルに存在し、それらが削除された場合、私はローカルでそれらを削除し、サーバーにコピーされないようにしたい(それが起こるように)。

私はコンテキストで 3 台のマシンを持っています。

  1. デスクトップ
  2. ノートブック
  3. ホームサーバー

そのため、たとえば、ノートブックとの同期で削除されたファイルがサーバーにある場合、デスクトップとの同期を実行するときに (削除されたサーバー ファイルがまだ存在する)、これらのファイルを削除してサーバーに再びコピーされないようにしたいことがあります。

これは、データベースと操作の追跡によってのみ可能だと思います:P

もっと簡単な解決策があれば教えてください。 ありがとうございます。

どのように解決するのですか?

Unisonを試してみてください。 http://www.cis.upenn.edu/~bcpierce/unison/

構文です。

unison dirA/ dirB/

Unisonはファイルが異なる場合にどうするか聞いてきますが、デフォルトの(競合しない)オプションを受け付ける下記を使えば、処理を自動化できます。

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ は全く質問をせず、無視された (競合した) ファイルの数を出力に書き込みます。

注:私はもうUnisonを使っていません(NextCloudを使っていますが、これは元のユースケースには対応していません)。しかし、以下の点に注意してください。 rsync は双方向の同期用に設計されていないのに対して unisonunison は、(他のソフトウェアと同じように)バグやしわ寄せがあるかもしれません。今は活発にメンテナンスされているようで驚いたが(前回見たときは死んでいるように見えたと思う)、最近はどうなんだろう。双方向のファイル同期をする必要性がないので、もっと良い選択肢があるのかもしれませんが。