ファイルの末尾に5秒のデータを追加するには?

ファイルの末尾に5秒のデータを追加するには?

たとえば、シェルスクリプトがfile.txtにデータを追加するとします。

1...........
2...........
3.............
4.............
5..............

これで、データ全体の代わりに5秒以内にfile.txtに追加された新しいデータを確認できる別のスクリプトが必要です。

tail -fデータ全体を表示するオプションがあるかどうかわかりません。

-5のようなものを理解するのに便利なのは、行数ではtail -5 file.txtなく秒数です。

注:最後に残りのデータを提供する必要があるたびにデータを見逃したくありません。これは重要です。

ベストアンサー1

retail状態を保存 tail。各呼び出しの後、inode番号とファイルサイズを記録し、次の呼び出しは中断された部分から続きます(オプションで回転するファイルも処理されるため、inodeが記録されます)。

while true; do 
    retail myfile.log
    sleep 5
done

retailファイルデータ自体にタイムスタンプ(syslogを介している可能性があります)または単調に増加するIDが含まれていない限り、ファイルサイズを使用していくつかの外部状態が必要です。

ファイルが1行ずつ追加され、フラッシュされると仮定すると、retailデータは失われません。また、精度が高くない場合(たとえば、µs以上)、データのタイムスタンプを確認するよりも安定している必要があります。

retailCで書かれており、@Ulrich Dangelの提案と似ていますlogtail。 2つの異なるバージョンがあるようです。どちらもPerlで実装されていますが、どちらも使用しませんでした。

おすすめ記事