330 words
2 minutes
ファイルの監視を行うコマンドinotifywait
ファイルの中身に変更があった際にコマンドを実行させる
昔からファイルの監視ができないか模索していましたが、chatGPTに聞いたところinotifyというコマンドを教えてくれました。
そこからコードを組んでこうなりました。
#!/bin/bashWATCH_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/