Uncategorized

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

シェルでファイルの作成と削除を待つのに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
$

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

タイトルとURLをコピーしました