有状态尾(仅显示上次执行的新行)

Ste*_*epp 5 perl stateful tail persistent

我希望能够看到自上次查询以来没有再次读取整个文件的文件中添加了多少行.

就像是 :

ptail my_file | fgrep "[ERROR]" | wc -l 
Run Code Online (Sandbox Code Playgroud)

简单的Perl解决方案是首选,因为我没有轻松访问编译器.

Dav*_*man 2

尽管它消耗了这些线路用于其他目的,但我之前已经编写过基本上执行此操作的代码。

您需要做的就是在尾部完成后记录每个文件的字节偏移量(使用tell)和inode(使用stat )。下次对文件运行时,首先再次检查 inode(使用stat)。如果 inode 已更改或文件小于记录的偏移量,则它是一个不同的文件(已删除并重新创建、日志已旋转等),因此您应该从头开始显示它;否则,查找记录的偏移量并从那里显示它。