Top/article/Script-executed-when-file-is-created-using-inotifywait
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 1/1997 - Admin
These search terms have been highlighted:[bash]

Script executed when a file is created using inotifywait

inotifywait を使って,ファイルが作成されたらアクションを起こすスクリプトを書く

[linux][bash]
2009-04-01

例えば,ディレクトリ /tmp/hoge に print.ps というファイルが作成されたら,それを自動的に印刷するようにしたい場合,ファイル作成イベントを監視する必要がある. inotifywait というコマンドを使えばそれが簡単にできるので,紹介する.

次のbashスクリプトは, /pstmp というディレクトリにファイルが作成されたら,そのファイルを別ユーザアカウントで kghostview で開く,というものだ*1.

#!/bin/bash
# required package: inotify-tools
psout_dir=/pstmp
m_account=aki-yam

events=(-e CREATE -e MODIFY -e MOVED_TO)
while inotifywait ${events[@]} $psout_dir; do
  psfile=$psout_dir/`ls -rt $psout_dir | tail -n1`
  echo "new ps file: $psfile"
  chmod 644 $psfile
  kdesu -u $m_account kghostview $psfile
done

ここで使われている inotifywait というコマンドは (debianだと) inotify-tools パッケージに含まれているので,インストールしておく必要がある.このスクリプトは, ~/.xsession とかにバックグラウンドで実行されるように書いておけばよい.

さて,inotifywait は,

inotifywait -e イベント ファイルorディレクトリ

のように使うと,「ファイルorディレクトリ」で「イベント」が発生するまで待機する.上のスクリプトでは

inotify-tools -e CREATE -e MODIFY -e MOVED_TO /pstmp

のように使っているから,/pstmp ディレクトリで CREATE (作成), MODIFY (変更), MOVED_TO (に移動) のいずれかのイベントが発生するまで待機し,イベントが発生したら do 以下を実行するようになっている.

do ~ done は,まず psfile に最新のファイルを代入し,それを echo, さらに, $m_account ユーザで kghostview コマンドを実行するというもの. kdesu は別ユーザでXを使うコマンドを実行するKDEのコマンド,kghostview はKDEのpsビューアである.単に印刷するだけなら do ~ done は,

  psfile=$psout_dir/`ls -rt $psout_dir | tail -n1`
  echo "new ps file: $psfile"
  sudo -u $m_account lp $psfile

みたいな感じでいいと思うが,両面印刷とかのオプションを手軽に変更できるように kghostview を利用するようにしている.

さらに,KDE のプリントマネージャを起動し,「追加-特殊(疑似)プリンタを追加」を選択,コマンド設定のところに

cp %in /pstmp/`basename %in`

と設定すれば,通常のプリンタみたいに扱えるようになる.

ちなみに何でこんなスクリプトを作ったかというと,ウチの大学が個人マシンのアカウント名と大学のアカウント名を一緒にしないと印刷できないようにしてしまったからだよ! 印刷するために,イチイチpsファイルを生成して sudo -u ... とかやってたらめんどくさくてしかたないよ!

その後... (2013) †

Google のクラウドプリントを利用するようになりました.


*1 修正@Apr.14,2009: chmod を加えた.kdesuの&を消した.



Last-modified:2014-12-31 (Wed) 02:50:49 (3804d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.009 sec.