rsyncとの双方向同期


95

フォルダー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オプションがあり、私がやりたいことを達成するのに役立ちますが、双方向同期では機能しません。

Syn上のサーバーファイルを削除する場合、ローカルファイルが削除されていれば機能しますが、何らかの理由で(後で説明します)サーバーにはないがローカルに存在し、それらが削除されたファイルがある場合は、私はローカルでそれらを削除し、サーバーがコピーされないようにします(それが発生した場合)。

事は私が文脈で3台のマシンを持っているということです:

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

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

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

より簡単な解決策はありますか?ありがとうございました。


1
私にも同じ問題があります。解決策を見つけました、mwm?
ムーシュ

7
私は実際にやった。Dropboxのようなエクスペリエンスを実現しようとしていて、ユニゾン(rsyncを使用)とlsyncdがファイルの変更を監視するソリューションを考え出しました。私はまた、この解決策と他のトリックの上に他の人々を見つけました» cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu
mwm

現在、ホームサーバーでローカルにnextcloudを使用しています。100%管理された完璧な「ドロップボックス」溶液。android / ios / win / macos / linux / webクライアントがあります。
mwm

回答:


63

Unisonを試す:http : //www.cis.upenn.edu/~bcpierce/unison/

構文: unison dirA/ dirB/

Unisonは、ファイルが異なる場合にどうするかを尋ねますが、デフォルトの(競合しない)オプションを受け入れる次のコマンドを使用して、プロセスを自動化できます。

unison -auto dirA/ dirB/

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


7
Unisonは、小さなディレクトリで非常に使いやすいものです。しかし、ファイル数が多いディレクトリの場合、それは非常に遅いです。rsyncがすぐにコピーを開始する場合、unisonはすべてのファイルをスキャンしてから何かをコピーするため、コピーの開始に12時間以上かかることがあります。
ブレントファウスト2014年

1
これはgitが優れていますか?少なくともgitは使いやすく、トランスポートは高速です。BLOBには、Githubによって開発されたLarge File Storageという拡張機能があります
2015年

1
gitの主な問題は、ファイルが大きいことと、明示的なコミット用に設計されていることです。両方が合理等のgit -アネックス、大容量のファイルストレージなどのアドオンによって大幅に改善することができる
アレックス

3
@wenerねじにハンマーを使用したり、釘にドライバーを使用したりしないでください。:)
ADTC、2016

2
unisonは素晴らしいですが、信頼性も非常に低いです。私のユースケースの約50%では、単純な方法ではうまくいきませんでした。これの最も一般的な原因は、バージョン間の機能の低下です。権限のないコンピューター上のコンテンツと同期することがあります。そのサーバーのバージョンが私とは異なる場合、unisonは失敗します。さらに、一部のライブラリのコンパイルされたバージョンが異なるため、同じバージョンのユニゾンクライアント間で失敗しました(これは、ubuntuコンピューターとraspberry piの間でした)。
argentum2f


5

Osync:http : //www.netpower.fr/osyncを使用できます。これは、インテリジェントな削除伝播を使用したrsyncに基づいています。また、停止した実行の再開、ソフト削除、時間制御など、複数のオプションがあります。


5

元の質問には、デスクトップとラップトップ、および音楽ファイルの例も含まれているため(おそらくGUIを使用しているため)、これまでで最高の双方向、マルチプラットフォーム、無料、オープンソースプログラムの1つであるFreeFileSyncについても触れます。。

GUIベースで、非常に高速で直感的であり、リモート接続、「衝突」(たとえば、タイムスタンプが類似するファイル)の表示とインタラクティブな管理、双方向転送、ミラーリング、など。


4

これを試して、

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

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

sync-music: get-music put-music

私はこれをテストするだけでうまくいきました。私はWindows7(rsyncパッケージがインストールされたcygwinを使用)とFreeNASファイルサーバー(FreeNASはrsyncパッケージがプリインストールされたFreeBSDで実行されます)の間で双方向同期を行っています。


3
これは新しいローカルファイルを削除しませんか?-u宛先で新しいファイルをスキップしますが、rsyncには削除の経過時間を追跡する方法がないため、このスクリプトは、ローカルファイルが新しい(および保持する必要がある)か、古い(および削除する必要がある)かをどのように区別できますか? ?それとも私は誤解していますか?
Matthemattics 2013

ない--delete-excluded任意の宛先ディレクトリに存在するファイルではなくソースディレクトリを削除しますか?私はあなたが定義しなければならないと思った--exclude=<filename>ので、rsyncはこれらの除外を削除するだけではありませんか?または、rsyncはすべての非ソースディレクトリファイルを「除外」として扱いますか?
Mr_Moneybags 2013

2
答えが見つかりました:これは、送信側ではない受信側のファイルを削除することに加えて、除外された受信側のファイルも削除するようにrsyncに指示します(--excludeを参照)rsync.samba.org/ftp /rsync/rsync.html
Mr_Moneybags

2
私の理解では、宛先にファイルを作成し、rsyncコマンドを実行してソースから宛先にコピーすると、タイムスタンプが使用されないため、宛先のファイルが削除されます。これはあなたが正しいものではありませんか?
elexhobby 2014

10
@Lübnah:正解です。このソリューションは、完全な2ウェイ同期ではない:rsyncのではあるので--delete-excluded使用して実行されるサーバーとしてソース最初:ファイルローカルで追加がされます削除された(に追加されたファイルに対し、その実行時にサーバーが されているローカルターゲットにコピー)。サーバーへのバック同期のみローカルファイルはファイルですまた、サーバー上に存在するとし、ローカルで変更 OPのシナリオではそうではありません- (最近でサーバーのバージョンより)。あなたが示唆しているように、rsync実行間で状態を保存する必要があるため、真の双方向同期はでは実行できません。
mklement


1

現在、SparkleShare https://www.sparkleshare.org/を使用しています

Mac、Linux、Windowsで動作します。


時間の経過とともに、私は自分のソリューションを更新し続けます。現在、ホームサーバーでnextcloudを使用しています。Linux、Mac、Windows、Android、iOSのネクストクラウドクライアントとの同期。
mwm

0

2つの同期で機能するかどうかはわかりませんが、-deleteを機能させるには、-recursiveパラメーターも追加する必要があります。


1
オプションの短い等価で--recurseある-rOPがどの、(圧縮オプショングループ内に埋め込まれた使用します-avzru)。
mklement0 2014年

0

cloudsyncを使用して、フォルダーをリモートと同期させることができます。

pip install cloudsync
pip install cloudsync-gdrive
cloudsync sync file:c:/users/me/documents gdrive:/mydocs

リモートがNFSの場合、以下を使用できます。

cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs

-1

Rcloneはあなたが探しているものです。Rclone(「クラウドストレージのrsync」)は、ローカルファイルシステムを含むさまざまなクラウドストレージプロバイダーとの間でファイルやディレクトリを同期するコマンドラインプログラムです。Rcloneは、以前はSwiftsyncとして知られており、2013年から利用可能になっています。


双方向の同期はサポートされていません:rclone.org/commands/rclone_sync
Martin Braun
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.