はじめに
受信したファイルを検知する方法は複数存在しますが,今回はinotifyというAPIの使用により検知します.
install
Debian系のLinuxディストリビューション(DebianやUbuntu)の場合は,下記のコマンドでインストールすることができます.
$sudo apt install inotify-tools
今回はUbuntu20.04上でインストールを行うため,こちらのコマンドを使います.
Ubuntu14.04からは「apt-get」ではなく「apt」コマンドが推奨されているらしいので,時代に合わせましょう.
なお,RedHat系のLinuxディストリビューションの場合は下記のコマンドを用います.
&yum install inotify-tools
使用方法
inotify-toolsでは,inotifywaitというコマンドを用いることでファイルシステムイベントを表示させることができます.
オプションとして-mをつけることで複数回イベント通知が行われるようになり,-e をつけることで,特定のイベントのみを通知するようにフィルタリングします.
以上を踏まえてディレクトリ内に転送されたファイルの検知をトリガーに処理を開始する方法を書くと,以下のようになります.
watch=(-e CREATE -e CLOSE_WRITE -ATTRIB -m)
inotifywait ${watch[@]} /home/user/kanshi | while read notice
do
if [ "`echo $notice | awk "{print \$2;}" | grep CREATE`" ]
then
echo "処理開始"
fi
done
今回のsample.shでは,監視するファイルイベントとしてCREATE(ディレクトリ名kanshiにファイルが送信された時)とCLOSE_WRITE(ファイルの転送が完了した時),そしてATTRIB(メタデータが変更されたとき)の3つをトリガーに設定しています.
/home/user/kanshiの中を監視して,もしCREATEを検知したら処理開始がechoされるようになっています.
CREATEのみをトリガーとしたい場合はCLOSE_WRITEは不要です.
if文の中ではinotifywaitコマンドを変数noticeとした上でCREATEが表示されるはずの行と位置を抜き取り,「CREATEが表示されるなら」という条件に設定しています.
その他のイベントや使用例については,https://qiita.com/stc1988/items/464410382f8425681c20 を参考にすると良いと思います.