asciidoctor
拡張子を持つファイル形式を含む複数のサブフォルダがあるフォルダがあります.adoc
。
ファイルを変更するたびに(頻繁に発生する)、以下を実行する必要があります。
asciidoctor -q filename.adoc
HTML形式でコンパイルします。
このプロセスを自動化しようとしています。これまで私はこれを使用していました入力する:
ls *.adoc | entr asciidoctor -q *.adoc
ただし、サブフォルダではなく既存のフォルダでのみ機能します。このバリエーションを試しましたが、うまくいきません。
find . -name '*.adoc' | entr asciidoctor -q *.adoc
すべてのサブフォルダに対してこのプロセスを自動化する方法についてのアイデアはありますか?
答え1
変更を開始する前に、次のタイムスタンプを作成することをお勧めします。
touch time.stamp.file
編集後、次のように変更されたすべてのファイルを見つけることができます。
find . -name '*.adoc' -newer time.stamp.file -exec asciidoctor -q {} +
答え2
- "*.adoc"ファイルの検索
- filename.adoc が filename.html より最新かどうかをテストします。
その場合はasciidoctorを実行してください。
find . -name '*.adoc' | while read FILE; do [ "${FILE}" -nt "${FILE%adoc}html" ] && asciidoctor -q "${FILE}" ; done
またはスクリプトを置く:
#! /bin/bash
find . -name '*.adoc' | while read FILE; do
if [ "${FILE}" -nt "${FILE%adoc}html" ]; then
asciidoctor -q "${FILE}"
fi
done
crontabで1分ごとに1行またはスクリプトを実行できます。
crontab -e
行を追加
* * * * * /home/joe/update_adoc.bash
答え3
これはオープンソースツールを使用して行うことができますmonit
!
以下を追加してみましょう/etc/monit.conf
。
check file test with path /path/tp/test
if changed checksum then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
a_user_id
asを持つユーザーにファイルid
に対する十分な権限があることを確認し、rootに変更するときは、読み取りおよび実行権限があることを確認する必要があります。/path/to/test
/path/to/script.sh
monit.conf
monit reload
変更のインポートmonit daemon
watch monit status
monit
イベントがトリガーされると、レポートの変更が表示されることがあります。
たとえば、この例では、
ファイルの内容を変更すると、/path/to/test
/ path / to / script.shスクリプトが呼び出されます。
デフォルトでは、monit
30秒ごとに目覚め、設定されたチェックを実行します。
新しいファイルがディレクトリに追加されたか、ディレクトリ内のファイルが変更されたかどうかを確認するには、次の手順を実行します。
check directory test2 with path /path/to<br/>
if changed timestamp then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id
この構成は、アプリケーションのニーズに合わせて簡単に更新できると確信しています。