短い答え

短い答え

次のように複数のファイルを一度に追いつくときに、各行の先頭にファイル名を表示する方法はありますか?

tail -f one.log two.log

電流出力

==> one.log <==
contents of one.log here...
contents of one.log here...

==> two.log <==
contents of one.log here...
contents of two.log here..

似たようなものを探しています。

one.log: contents of one.log here...
one.log: contents of one.log here...
two.log: contents of two.log here...
two.log: contents of two.log here...

ベストアンサー1

短い答え

GNUパラレルこれを簡単に実行できる優れたオプションセットがあります。

parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log

出力は次のとおりです。

one.log:one.logの内容はここにあります...
one.log:one.logの内容はここにあります...
Two.log:two.logの内容は次のとおりです。
Two.log:two.logの内容は次のとおりです。

追加の説明

  • このオプションは、--tagstring=str各出力行を文字列として表示します。ステル。 ~からparallel マニュアルページ:
--タグ文字列
                文字列で行を表示します。各出力ラインの前に
                strとTAB(\ t)。 str には {} などの代替文字列を含めることができます。

                -u、--onall、--nonall を使用する場合、--tagstring は無視されます。
  • すべての項目は{}並列引数に置き換えられます。この場合、ログファイル名はone.logおよびtwo.log(後のすべての引数:::)です。

  • --line-bufferコマンドが完了すると、コマンドの出力(または)が印刷されるため、このオプションが必要です。ファイルが大きくなるのを待つので、出力を1行ずつ印刷する必要があります。再びtail -f one.logtail -f two.logtail -f--line-bufferparallel マニュアルページ:

--line-buffer(アルファテスト)
                ラインベースのバッファリングされた出力。 --groupは出力を保存します
                すべてのことを一緒にしてください。 --ungroup は出力の混合を許可します。
                ラインの半分は職業から出て、ラインの半分は職業から出てきます。
                他の職業。 --line-bufferは両方に適しています:GNU Parallel
                行全体を印刷しますが、混合行を許可します。
                他の職業。

おすすめ記事