
fswatch rsync unison を使ってリアルタイムで同期する
2019-11-032 min read
目次
概要
fswatch + rsync or fswatch + unison でディレクトリ間をリアルタイムで同期する方法の紹介です。
開発環境へのアップロードなどの場面で役立つでしょう。
環境・バージョン情報等
mac上で検証しました。全てhomebrewでセットアップしています。
fswatch
バージョン情報
- macOS Catalina
- fswatch 1.14.0
- Rsync 3.1.3
- unison 2.51.2 (ocaml 4.08.1)
インストール
fswatch
$ brew install fswatch
rsync
$ brew install rsync
unison
$ brew install unison
fswatch + rsync で同期する
ここで 作業ディレクトリ src1/ と src2/ を同期する方法を考えます。
fswatch + rsync を利用する方法は 例えばsrc1/ ディレクトリでファイルに変更があった場合 src2/ に同期するというものです。
$ fswatch -o /path/to/src1 | xargs -I{} rsync -r /path/to/src1/ /path/to/src2/
rsyncは双方間の同期に向いていません。双方間の同期を実現するにはunisonが必要になります。
fswatch + unison で同期する
次に fswatch + unison を利用して src1/ と src2/ の双方向で同期する方法を紹介します。
unisonの設定
unisonを容易に利用するために設定ファイルを記述します。
~/.unison/sync.prf
# タイムスタンプをコピーする
times = true
# 新しいファイルを優先
prefer = newer
# 同期する対象のルートパスの定義
root=/path/to/src1/
root=/path/to/src2/
# 同期するパスの定義
path=./
同期コマンド
$ fswatch -o /path/to/src1 /path/to/src2 | xargs -I{} unison -batch sync
上手くいくと次のようにログが出力されます。
Looking for changes
Reconciling changes
changed <==== props test.txt
src1 : changed file modified on 2019-11-02 at 18:53:30 size 20 rw-r--r--
src2 : changed props modified on 2019-11-02 at 18:53:39 size 17 rw-r--r--
<---- changed .DS_Store
src1 : unchanged file modified on 2019-11-02 at 18:34:44 size 6148 rw-r--r--
src2 : changed file modified on 2019-11-02 at 18:34:49 size 6148 rw-r--r--
<---- changed test2.txt
src1 : unchanged file modified on 2019-11-02 at 18:24:03 size 0 rw-r--r--
src2 : changed file modified on 2019-11-02 at 18:35:02 size 1 rw-r--r--
Propagating updates
UNISON 2.51.2 (OCAML 4.08.1) started propagating changes at 18:56:19.92 on 02 Nov 2019
[BGN] Updating file test.txt from /path/to/src2 to /path/to/src1
[END] Updating file test.txt
[BGN] Updating file .DS_Store from /path/to/src2 to /path/to/src1
[END] Updating file .DS_Store
[BGN] Updating file test2.txt from /path/to/src2 to /path/to/src1
[END] Updating file test2.txt
参考
https://qiita.com/tukiyo3/items/98f582a7ed0227cfc564
Recommends
New Posts
Hot posts!
Date
Tags
Author