
に触発されたこのスーパーユーザーの回答次のスクリプトを作成しcopy_library.sh
、 というファイルと同じフォルダーに保存しましたlibrary.bib
。
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
./copy_library.sh
このスクリプトを手動で開始し、最初のコピー後にプロセスを終了すると(正常に動作します)、
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
それ以上の変更は追跡されません。このスクリプトを手動で起動しなくても、継続的に「バックグラウンド」で実行されるように、何らかの操作を行う必要があるはずです。
しかし何?
答え1
man ページからinotifywait
:
inotifywait は Linux の inotify(7) インターフェースを使用してファイルの変更を効率的に待機します。シェル スクリプトからのファイルの変更を待機するのに適しています。イベントが発生すると終了するか、継続的に実行して発生するイベントを出力することができます。
そして
-m, --monitor 単一のイベントを受け取った後に終了するのではなく、無期限に実行します。デフォルトの動作は、最初のイベントが発生した後に終了することです。
編集: 15 秒ごとに追加されるログがあります。次のスクリプトは、inotifyread によって出力される行ごとに while ループを実行します。
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
もちろん、あなたの場合は、イベント (modify) を close_write に変更する必要があります。