不明な名前を持つ新しく作成されたファイルに対して Tail -f を実行する

不明な名前を持つ新しく作成されたファイルに対して Tail -f を実行する

実行するたびに新しいログ ファイルを生成するプログラムがあります。何が起こっているかを確認するには、ログを取りたいのですtail -fが、問題はファイル名が事前にわからないことです。

では、特定の (シェル グロブ) パターンに一致するすべてのファイルを追跡する方法はありますか? このようなスクリプトを簡単に作成できると思いますが、すでに解決策があるかどうか疑問に思っています。

答え1

tail名前を知らずに直接実行する方法はないと思います。名前がわかってtail --follow=name --retryいれば、 then は動作し、ファイルが表示されるまで待機してから、それに従って処理を開始します。

inotifywaitファイルの出現を監視し、その後それを追跡する小さなシェル スクリプトを作成することをお勧めしますtail -f

答え2

ファイル名が事前にわからない場合:

  1. ファイル名を決める。foo.log
  2. そのファイルを監視します: tail -F foo.log(foo が存在するかどうかは関係ありません)
  3. ツールを使用してディレクトリのファイルの変更を監視し、コマンドを実行します。

コマンドについては、次のいずれかを実行します。

  • 新しいファイルを移動して foo.log を上書きしますmv the_new_file_which_appeared foo.log(アプリのログが一度開かれると、これで問題なく動作します)
  • または単に symlink: ln -s the_new_file_which_appeared foo.log- と記述すれば、tail でそれをキャッチできるはずです。

ディレクトリを適切に監視するには (手順 3)、構成可能な巧妙なツールが必要です。

個人的にはガードとともにガード::プロセス

実際には、Guard はシェル スクリプトを使用するよりもそれほど重くはなく (Linux では inotify の上の薄いレイヤーです)、セットアップも非常に迅速かつ簡単です。

関連情報