fswatch rsync unison を使ってリアルタイムで同期する

fswatch rsync unison を使ってリアルタイムで同期する

2019-11-032 min read

目次

  1. 概要
  2. 環境バージョン情報等
  3. fswatch--rsync-で同期する
  4. fswatch--unison-で同期する
  5. 参考

概要

fswatch + rsync or fswatch + unison でディレクトリ間をリアルタイムで同期する方法の紹介です。

開発環境へのアップロードなどの場面で役立つでしょう。

環境・バージョン情報等

mac上で検証しました。全てhomebrewでセットアップしています。

fswatch

https://github.com/emcrisostomo/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

https://qiita.com/m-hatano/items/4b458c4a49136f190c34

https://qiita.com/nagais/items/7403411b4aa193d0fa0d

Tags
javascript(110)
node.js(54)
linux(54)
amazon%20aws(47)
typescript(45)
%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0(36)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86(30)
html5(29)
php(24)
centos(24)
python(22)
%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0(21)
mac(21)
mysql(20)
canvas(19)
opencv(17)
%E9%9B%91%E8%AB%87(16)
docker(16)
wordpress(15)
atcoder(14)
apache(12)
%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92(12)
%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9(12)
amazon%20s3(12)
red%20hat(12)
prisma(12)
ubuntu(11)
github(10)
git(10)
vue.js(10)
%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF(10)
mariadb(10)
react(9)
aws%20cdk(9)
css3(8)
%E5%8F%AF%E8%A6%96%E5%8C%96(8)
%E5%B0%8F%E3%83%8D%E3%82%BF(8)
nestjs(8)
amazon%20lightsail(7)
next.js(7)
%E3%83%96%E3%83%AD%E3%82%B0(6)
cms(6)
oracle(6)
perl(6)
gitlab(6)
iam(5)
amazon%20ec2(5)
%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93(5)
aws%20amplify(5)
curl(4)
Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項