ログファイルの最後のn行だけを維持する方法は?

ログファイルの最後のn行だけを維持する方法は?

私は何かをした後、独自のログファイルにいくつかの行を追加するスクリプトを書いています。最後のものだけを残したいNログファイルの行数(例:1000行)。これはスクリプトの最後で次のように実行できます。

tail -n 1000 myscript.log > myscript.log.tmp
mv -f myscript.log.tmp myscript.log

しかし、よりクリーンでエレガントなソリューションがありますか?たぶん単一のコマンドで実行できますか?

ベストアンサー1

可能ですが、他の人が言ったように、最も安全なオプションは、新しいファイルを作成してから元のファイルを上書きしながらそのファイルを移動することです。

次の方法は行をBASHにロードするため、行数に応じてtailログ行の内容を格納するローカルシェルのメモリ使用量に影響します。

以下は、BASH評価の動作によりログファイルの末尾にある空白行も削除するため、"$(tail -1000 test.log)"すべてのケースで実際に100%正確な切り捨てを提供するわけではありませんが、場合によっては十分です。

$ wc -l myscript.log
475494 myscript.log

$ echo "$(tail -1000 myscript.log)" > myscript.log

$ wc -l myscript.log
1000 myscript.log

おすすめ記事