330 words
2 minutes
ファイルの監視を行うコマンドinotifywait
2025-04-06

ファイルの中身に変更があった際にコマンドを実行させる#

昔からファイルの監視ができないか模索していましたが、chatGPTに聞いたところinotifyというコマンドを教えてくれました。

そこからコードを組んでこうなりました。

#!/bin/bash
WATCH_DIR="/path/to/watched_dir"
LOG_FILE="/var/log/inotify_monitor.log"
DELAY=3 # 変更後に3秒待ってから実行
echo "Monitoring directory: $WATCH_DIR" | tee -a "$LOG_FILE"
# 変更が発生したら一度だけ実行
while true; do
inotifywait -r -e modify,create,delete "$WATCH_DIR" >/dev/null 2>&1
echo "Change detected, waiting for more changes..."
sleep $DELAY # 一定時間待つ
echo "$(date '+%Y-%m-%d %H:%M:%S') - Detected changes in $WATCH_DIR" | tee -a "$LOG_FILE"
# ここで実行したい処理を追加
done

sleepを行っている理由はディレクトリを見ているので複数のファイルに変更が同時にあると、その変更数連続でコマンドをされるのでそれを防ぐためにバッファータイムを設けています。(例えるなら同時に20ファイル更新あった場合に20回コマンドが実行されてしまいます。これは一回で送るのが望ましいので上記のようになっています。)

そしたらこれをdeamonで実行させれば、あとはもう記憶から忘れてもいいですね。

ファイルの監視を行うコマンドinotifywait
https://fuwari.vercel.app/posts/soto/diary/2025/04/2025-04-06/
Author
Lorem Ipsum
Published at
2025-04-06
License
CC BY-NC-SA 4.0