
inotifyは、ファイルシステムへの変更を通知するLinuxカーネル機能の一つです。 この機能を利用するライブラリは様々言語で提供されていて、ファイル変更のイベント処理を必要とする 多くのソフトウェアに利用されています。
inotify-tools の inotifywaitコマンドは、コマンドを使ってinotifyの機能を利用できるので、
任意のディレクトリ、ファイルに更新があった場合、何かの処理をさせたいといったスクリプトを書く際に利用できます。
inotify-tools は、以下のコマンドでインストールできます。
$ sudo apt install inotify-tools
使用方法は、「inotifywait 監視ディレクトリ」として実行します。-m オプションでデーモンとして起動されます。
$ inotifywait -m /tmp/
Setting up watches.
Watches established.
/tmp/ CREATE test1
/tmp/ OPEN test1
/tmp/ ATTRIB test1
/tmp/ CLOSE_WRITE,CLOSE test1
/tmp/ MOVED_TO test2
別のターミナルで監視対象ディレクトリにファイルを作成すると動きがわかります。
$ touch /tmp/test1
$ touch test2
$ mv test2 /tmp/
以下のようなスクリプトを用意しておくと~/印刷/にファイルを移動すれば、 ファイルが自動で印刷されて、印刷済ディレクトリにファイルが移動されます。
#!/bin/bash
WATCH_DIR="/home/taro/印刷/"
DONE_DIR="/home/taro/印刷済/"
while true; do
filename=`inotifywait -e MOVED_TO ${WATCH_DIR} --format "%f" 2> /dev/null`;
lpr "${WATCH_DIR}/${filename}";
mv "${WATCH_DIR}/${filename}" "${DONE_DIR}/${filename}"
done
-e で監視対象とするイベントを指定します。–format でファイル名のみログとして出力します。
-e 使用する主なイベント
ACCESS アクセスされた
MODIFY ファイル内容が変更された
CLOSE クローズされた
OPEN オープンされた
MOVED_TO 対象ディレクトリ内へ移動された
MOVED_FROM 対象ディレクトリ内から移動された
MOVE 対象自身が移動された
CREATE 対象ディレクトリ内で新規作成された
DELETE 対象ディレクトリ内で削除された
–format で指定出来るオプション
%T : 時刻
%w : ウォッチファイル(ディレクトリ)
%f : ファイル名
%e : イベント