2020/07/07

inotifywait ディレクトリ監視から自動動作のサンプル

ディレクトリ監視をして、業務効率化を図るべく、
今更感満載ながらinotifywaitに手を出してみた。

yumでインストールをする

epelレポジトリにあるので、未導入時はepel-releaseをインストール
# yum install epel-release 
 
inotify-toolsをインストールする。
# yum install inotify-tools 
ヴァージョン確認 
# inotifywait --help
inotifywait 3.14
 
 
動作は、ワンライナーでもOKだが、
シェルスクリプトにて動作させたほうが、汎用性が高い。
 
シェルスクリプトの例
先駆者の方々の歴史を参考に
今回は、pdftkと連携させ、監視ディレクトリにpdfファイルが新規作成されたら
作業用ディレクトリに移動しPDFに作業済みスタンプを押して、
作業済ディレクトリに保存という作業を想定。
 

doSetStamp.sh

ここから

#!/bin/sh
export PATH="/usr/local/bin:$PATH"#pdftkのパスを通す
MONITORDIR="/home/hoge/work" #監視ディレクトリ指定
##スタンプは /home/hoge/stamp/back.pdfを想定
 
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
  cd /home/hoge/work
  file=$(basename "${NEWFILE}" .pdf)
  mv "$file".pdf /home/hoge/work/"$file".pdf;
  cd /home/hoge/work/
  pdftk /home/hoge/work/"$file".pdf stamp ./stamp/back.pdf output /home/hoge/work/done/"$file"`date "+%Y%m%d"`.pdf;
  rm "$file".pdf
done

ここまで


inotifywaitでなく、シェルのルールの問題だが、
ダブルクオーテーションで括らないと、半角スペースでコマンドが止まってしまう。
Windowsユーザが使うので、どうしても半角スペース問題は、加味しておかないと
想定通りに動かない。
 
バックエンドで動かす場合は、 
$nohup doSetStamp.sh &
のようにする。

pdf以外のファイルをディレクトリに配置しない方法として、

do~doneの制御にifで判別させて仕分ける方法が最も簡単だと思う。
if [[ "$file" =~ .*pdf$ ]]; then  
 ここに動作させたい処理を書く; 
else
 pdfファイル以外の処理を書く;  
fi
 
 

0 件のコメント:

コメントを投稿