スポンサーリンク

inotify-tools rsync unison を利用してディレクトリを同期する

スポンサーリンク
CentOS
スポンサーリンク

スポンサーリンク

概要

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

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

環境・バージョン情報等

CentOS6上で検証しています。

inotify-tools

rvoicilas/inotify-tools
inotify-tools is a C library and a set of command-line programs for Linux providing a simple interface to inotify. - rvoicilas/inotify-tools

バージョン情報

  • CentOS6
  • inotify-tools (inotifywait, inotifywatch) 3.14
  • Rsync 3.0.6
  • unison 2.40.63

インストール

inotify-tools

# 必要なモジュール類のインストール
$ yum -y install wget gcc gcc-c++ make
# inotify-toolsのインストール
$ cd /tmp
$ wget http://download-ib01.fedoraproject.org/pub/epel/6/x86_64/Packages/i/inotify-tools-3.14-2.el6.x86_64.rpm
$ yum -y localinstall inotify-tools-3.14-2.el6.x86_64.rpm
inotify-tools-3.14-2.el6.x86_64.rpm CentOS 6 Download
Download inotify-tools-3.14-2.el6.x86_64.rpm for CentOS 6 from EPEL repository.

rsync

$ yum -y install rsync

unison

$ cd /tmp
$ wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/unison-2.40.63-1.el6.rf.x86_64.rpm
$ yum -y localinstall unison-2.40.63-1.el6.rf.x86_64.rpm
unison-2.40.63-1.el6.rf.x86_64.rpm CentOS 6 Download
Download unison-2.40.63-1.el6.rf.x86_64.rpm for CentOS 6 from Repoforge (RPMforge) repository.

inotifywait + rsync で同期する

ここで 作業ディレクトリ src1/ と src2/ を同期する方法を考えます。

fswatch + rsync を利用する方法は 例えばsrc1/ ディレクトリでファイルに変更があった場合 src2/ に同期するというものです。

$ inotifywait -m /path/to/src1 | xargs -I{} rsync -r /path/to/src1/ /path/to/src2/

rsyncは双方間の同期に向いていません。双方間の同期を実現するにはunisonが必要になります。

inotifywait + unison で同期する

次に fswatch + unison を利用して src1/ と src2/ の双方向で同期する方法を紹介します。

unisonの設定

unisonを容易に利用するために設定ファイルを記述します。

~/.unison/sync.prf

# タイムスタンプをコピーする
times = true

# 新しいファイルを優先
prefer = newer

# 同期する対象のルートパスの定義
root=/path/to/src1/
root=/path/to/src2/

# 同期するパスの定義
path=./

同期コマンド

$ inotifywait -m /path/to/src1 /path/to/src2 | xargs -I{} unison -batch sync

参考

linux-複数のディレクトリを同時に監視する「inotifywait」 - コードログ
指定したディレクトリの1つに新しいファイルが作成されたときにアクションをトリガーしたい。この目的のためにinotifywaitを使用したいと思います。しかし問題は、inotifywaitを使用して複数のディレクトリを同時に監視する方法がわからないことです。単一のディレクトリを再帰的に見ることは問題ではありませんが、いく...

[https://qiita.com/stc1988/items/464410382f8425681c20

タイトルとURLをコピーしました