指定ファイルの更新時に通知してくれるスクリプト【シェルスクリプト】
どうも、ねこきち(@nekokichi1_yos2)です。
とある企業のコーディング課題で、ファイルを監視する問題が出て、シェルスクリプトで実装しました。
備忘録として投稿します。
動作環境
仕組み
監視対象のファイルパスを取得
監視したいファイルのパスを用意。
シェルの実行ファイル(.sh)と同じ箇所なら、ファイル名だけで良い。
filePath="xxxx/yyyy/zzzz"
変更日時を取得
ls -l -T、で対象ファイルの属性情報を取得。
-rw-r--r--@ 1 ユーザ名 staff 99 4 10 12:08:50 2022 ファイル名
last=`ls -l -T $filePath | awk '{print $6"月"$7"日"$8}'`
監視開始
while文で実行し続け、1秒度に監視。
while true; do sleep 1
... done
最新の変更日時を取得
1秒後の更新日時を取得。
current=`ls -l -T $filePath | awk '{print $6"月"$7"日"$8}'`
変更日時、現在の変更日時を比較
もし1秒前と1秒後でタイムスタンプが違えば、変更がされているので、処理を実行。
今回だと、"updated: $current"、と出力
if [[ $last != $current ]] ; then echo "updated: $current"
... fi
変更日時を更新
変更されるたびに最新の更新日時を取得
last=$current
実行結果
xxxx@xxxx ディレクトリ % ./test.sh updated: 4月10日11:42:53 updated: 4月10日11:44:51
ソースコード
filePath="ファイルのパス" last=`ls -l -T $filePath | awk '{print $6"月"$7"日"$8}'` while true; do sleep 1 current=`ls -l -T $filePath | awk '{print $6"月"$7"日"$8}'` if [[ $last != $current ]] ; then echo "updated: $current" last=$current fi done