4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ディレクトリ内に転送されたファイルの検知をトリガーに処理を開始する方法

Posted at

はじめに

受信したファイルを検知する方法は複数存在しますが,今回は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 をつけることで,特定のイベントのみを通知するようにフィルタリングします.

以上を踏まえてディレクトリ内に転送されたファイルの検知をトリガーに処理を開始する方法を書くと,以下のようになります.

sample.sh
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 を参考にすると良いと思います.

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?