Text-Processing

如何只保留日誌文件的最後 n 行?

  • August 15, 2021

我編寫的腳本做了一些事情,最後在它自己的日誌文件中附加了一些行。我只想保留日誌文件的最後 n 行(比如 1000 行)。這可以通過以下方式在腳本末尾完成:

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

但是有沒有更乾淨優雅的解決方案?也許通過單個命令完成?

這是可能的,但正如其他人所說,最安全的選擇是生成一個新文件,然後移動該文件以覆蓋原始文件。

下面的方法將這些行載入到 BASH 中,因此根據 from 的行數tail,這將影響本地 shell 的記憶體使用情況來儲存日誌行的內容。

如果日誌文件末尾存在空行(由於 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

引用自:https://unix.stackexchange.com/questions/310860