実行するたびに新しいログ ファイルを生成するプログラムがあります。何が起こっているかを確認するには、ログを取りたいのですtail -f
が、問題はファイル名が事前にわからないことです。
では、特定の (シェル グロブ) パターンに一致するすべてのファイルを追跡する方法はありますか? このようなスクリプトを簡単に作成できると思いますが、すでに解決策があるかどうか疑問に思っています。
答え1
tail
名前を知らずに直接実行する方法はないと思います。名前がわかってtail --follow=name --retry
いれば、 then は動作し、ファイルが表示されるまで待機してから、それに従って処理を開始します。
inotifywait
ファイルの出現を監視し、その後それを追跡する小さなシェル スクリプトを作成することをお勧めしますtail -f
。
答え2
ファイル名が事前にわからない場合:
- ファイル名を決める。
foo.log
- そのファイルを監視します:
tail -F foo.log
(foo が存在するかどうかは関係ありません) - ツールを使用してディレクトリのファイルの変更を監視し、コマンドを実行します。
コマンドについては、次のいずれかを実行します。
- 新しいファイルを移動して 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 の上の薄いレイヤーです)、セットアップも非常に迅速かつ簡単です。