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
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author