サブディレクトリのファイル(選択したものを除く)が変更された場合は、特定のコマンドを再実行する方法を探しています。
ユースケース
私はディレクトリから別のプロジェクトを進めています。たとえば、make
私のコンピュータの空き時間を使用してこのプロジェクトを繰り返しコンパイルしたいとします。一つのオプションはmake
。watch (1)
make
make
代わりに、すべてのファイルを監視し、プロジェクトのあるディレクトリが変更された後にのみ実行(または他のツール)するプロセスが必要です。
既存のソリューション
他の人がこう尋ねました。Bashスクリプトをファイルにリンクできますか?はありますが、inotifywait (1)
コマンドを繰り返すには良いインターフェイスがないようです。また、entr (1)
うまくいくような方法がありますが、もう一度確認してください。プロジェクトウェブサイト露出
entr
[i]独自のファイル検索構文を実装せずに、代わりに標準のUnixツールに依存することに最初に決定されました。
私はとても怠惰です。繰り返される呼び出しのループを作成したくありませんmake
。書くことができる高度な魔法ツールはありますか?
magic make
効果はmake
毎回再実行されます。何もない現在のディレクトリを変更しますか?
気づく:この魔法のツールが次のものを使用するときに避けられない競争条件を認識できる場合は理想的ですinotify
。呼び出しが行われた後に時計が設定される前に発生する変更です。これが可能かどうかはわかりませんentr
。この機能を使用するには、影響を受けるすべてのファイルのタイムスタンプの一種のスナップショットを追跡する必要があるようです。
恥ずかしい自己宣伝:これを実装する私自身の4行のコードは次のとおりです。rpt
そして完璧さとは距離が離れているので、ここで作業を複製しているのではないかと思います。
答え1
おそらくls <dir> | entr make <file>
効果があるでしょう。 inotifywaitだけがファイルの生成を開始します。
ファイル名を渡す必要がある場合は、この回答のコメントにある情報を使用してください。https://unix.stackexchange.com/a/81704/346155