
inotify-tools rsync unison を利用してディレクトリを同期する
2019-11-033 min read
目次
概要
inotify-tools + rsync or inotify-tools + unison でディレクトリ間をリアルタイムで同期する方法の紹介です。
開発環境へのアップロードなどの場面で役立つでしょう。
環境・バージョン情報等
CentOS6上で検証しています。
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
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
inotifywait + rsync で同期する
ここで 作業ディレクトリ src1/ と src2/ を同期する方法を考えます。
fswatch + rsync を利用する方法は 例えばsrc1/ ディレクトリでファイルに変更があった場合 src2/ に同期するというものです。
$ inotifywait -m /path/to/src1 | xargs -I{} rsync -r /path/to/src1/ /path/to/src2/
inotifywait の -e オプションで監視するイベントの種類を絞る事ができます。また複数の操作を行うのであれば、whileで回した方が良いと思います。
#!/bin/bash
SRC_PATH=/path/to/src1/
DST_PATH=/path/to/src2/
while inotifywait -e CREATE -e MODIFY -e DELETE $SRC_PATH; do
rsync -r $SRC_PATH $DST_PATH
chown www-data:www-data -R $DST_PATH
chmod 755 -R $DST_PATH
done
次は双方間のディレクトリ同期についてです。\n双方間の同期の実現は、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
参考
Recommends
New Posts
Hot posts!
Date
Tags
Author