【发布时间】:2016-12-01 22:48:16
【问题描述】:
我无法监控文件的更改。我需要能够知道文件何时更改,何时更改,我需要添加的新行。我打算解析每一行并找到符合某些条件的行,并根据这些行中的信息采取行动。我提前知道预期的匹配行数,但我不知道总共将添加多少行到文件中,也不知道匹配行将在哪里。
到目前为止,我已经尝试了 2 个包,但均无济于事。
据我所知,fsnotify 只能告诉我何时文件被修改,而不能告诉我修改的细节是什么。因为我需要知道文件中到底添加了什么,所以这对我没有好处。
(作为一个附带问题,这可以循环运行吗?我尝试的示例仅在一次修改后退出。我需要监视多个修改。)
这个包试图模仿 Unix 的 tail 命令,但它似乎有自己的问题。我得到的输出包括时间戳和其他数据——我只想要添加的行,没有别的。此外,它似乎认为一个文件已被多次修改,即使它只是一次编辑。此外,这里的交易破坏者是如果该行后面没有换行符,它不会输出最后一行。
委派给tail
我遇到了this 的答案,它建议将这项工作委托给tail 命令本身,但我需要它才能跨平台工作(特别是 macOS、Linux 和 Windows)。我不相信 Windows 上存在等效命令。
我该如何解决这个问题?
【问题讨论】:
-
hpcloud/tail的额外信息有什么问题?你仍然会得到附加的数据。 -
@JimB 这并不理想,但我可以解决它。我不能使用
hpcloud/tail的主要原因是因为如果没有换行符,它不会输出最后一行。 -
你当然可以使用 fsnotify,你只需根据收到的通知按需读取文件。我不知道用 Go 编写的更好的完整“tail -f”包(但场外推荐无论如何都是题外话)
-
查看stackoverflow.com/questions/31120987/… 以获得简单的解决方案。当应用程序监控少量文件并且可以容忍一点延迟时,它运行良好。
-
@JimB 感谢您为我指明了正确的方向。我最终使用
fsnotify和go-diff 在fsnotify发现更改时仅获取最后一行。如果您想写您的评论作为答案,我可以接受。