ディレクトリ監視をして、業務効率化を図るべく、
今更感満載ながら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 件のコメント:
コメントを投稿