ksaitoの日記

日々試したことの覚え書き

ファイルの作成と削除を待つ

シェルでファイルの作成と削除を待つのにinotify-toolsを使います。

インストール

aptでインストールします。

$ sudo apt install -y inotify-tools

ファイルの作成と削除を待つ

waitfile.shに指定した引数のファイルが作成されるのをfilewaitで待ちます。 その後、そのファイルが削除されるのをrmwaitで待ちます。

$ cat waitfile.sh
#! /bin/bash

fname=$1

filewait()
{
    ret=1
    while [ $ret == 1 ]
    do
        inotifywait -q -e create -t 1 . | grep $fname
        ret=$?
    done
}

rmwait()
{
    ret=1
    while [ $ret == 1 ]
    do
        inotifywait -q -e delete -t 1 . | grep $fname
        ret=$?
    done
}

echo waiting for $fname
filewait
echo $fname created!, waiting for $fname remove
rmwait
$

notifywaitの動作

最初は、よくわからず下記のようににファイルを指定してcreateイベントを待とうとしましたが、ファイルがないとNo such fileとなります。

$ inotifywait -e create fin.txt
Setting up watches.
Couldn't watch fin.txt: No such file or directory
$

ファイルがあると永遠に待ちます。

$ inotifywait -e create fin.txt
Setting up watches.
Watches established.

ディレクトリを指定すると次のようになります。 実行後に別の端末からfin.txtを作成すると./CREATE fin.txtが発生します。

$ inotifywait -e create .      
Setting up watches.
Watches established.
./ CREATE fin.txt
$

色々なファイルシステムで試してみると面白いかもしれません。