Linuxは、ファイルの作成、変更、削除など、すべてのファイルシステムイベントを監視するための優れたインターフェイスを提供します。インターフェイスはinotify
システムコールのファミリであり、これらのコールを利用するユーザースペースユーティリティはinotify-tools
、Ubuntu のパッケージ(ユニバースリポジトリで入手可能)によって提供されます。まだインストールしていない場合は、次の方法でインストールします。
sudo apt-get install inotify-tools
inotify-tools
提供しinotifywait
、inotifywatch
バイナリ、私たちは最初のものを必要としています。
したがってasciidoctor -q some_file
、.adoc
ファイルが変更されたときにコマンドが実行されるようにします(そのファイルsome_file
に置き換えられます)。その場合、.adoc
ファイルがdirectory /foo/bar
にあると想定して、監視を設定できます。
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
クワイエットモードを有効にし、inotifywait
それ自体からの情報はありません
-m
監視モードを有効にします。それ以外の場合は、最初のイベントの後に終了します
--event modify
、modify
イベントにのみ関心があります。つまり、ファイルが変更されたときです。その他の可能な値にはopen
、close
などがあります。
--format %w
、他のコマンドへの入力としてファイル名を使用するため、他の情報の束ではなく、変更されたファイル名のみが必要です。
/foo/bar/*.adoc
ディレクトリ.adoc
下のすべてのファイルに展開されます/foo/bar
上記の例では、ファイル名が変更されるたびにファイル名が表示されます。次に、ファイル名に対してコマンドを実行します(コマンドがSTDINを介して引数をとるとします)。
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
ディレクトリに再帰的な監視を設定することもできgrep
ます。その場合は、目的のファイルのみをフィルタリングするために使用する必要があります。ここでは、-r
ディレクトリでウォッチを再帰的に設定し()、ファイルをフィルター/foo/bar
するgrep
ために使用してい.adoc
ます。
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
ディレクトリを監視する場合、出力フォーマット指定子%w
はディレクトリ名に解決さ%f
れるため、ファイル名を取得する必要があります。ファイルの監視中、%f
空の文字列に解決されます。
、あなたも実行できることを注意inotifywait
デーモン(中-d
)モードのことができます。また、スクリプト全体のこと、および/またはバックグラウンドで実行、および/またはそれ以上の他のオプションを使用してプレイ。
また、必要にasciidoctor
応じて、任意の他のコマンドに置き換えることができます。
man inotifywait
より多くのアイデアを得るためにチェックしてください。