监控文件以进行添加并获取上次添加的行

时间:2016-12-01 22:48:16

标签: go tail

我无法监控文件的更改。我需要能够知道文件何时更改,何时更改,我需要添加新行。我打算解析每一行并找到符合某些标准的行,并根据这些行中的信息进行操作。我提前知道预期的匹配行数,但我不知道总共有多少行将被添加到文件中,或者匹配的行将在哪里。

到目前为止,我已经尝试了2个套餐,但没有用。

fsnotify/fsnotify

尽管我可以说,fsnotify只能告诉我何时修改文件,而不是修改的细节。因为我需要知道文件中添加了什么,这对我没有好处。

(作为一个侧面问题,这可以在一个循环中运行吗?我尝试在一次修改后退出的示例。我需要监视多次修改。)

hpcloud/tail

这个包试图模仿Unix tail命令,但它似乎有自己的问题。我得到的输出包括时间戳和其他数据 - 我只想要添加的行,没有别的。此外,它似乎认为文件已被多次修改,即使它只是一次编辑。此外,此处的交易破坏者是,如果该行没有后跟换行符,则不会输出最后一行。

委派给tail

我遇到this回答,建议将此工作委托给tail命令本身,但我需要这个工作跨平台工作(特别是macOS,Linux和Windows)。我不相信Windows上存在等效的命令。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

@ user2515526,

通常更改差异超出了文件观察者的范围'功能,因为,你知道,你可以改变一个图像,观察者需要在内存中保留几个Mb的差异轨迹,如果我们有数千个文件怎么办? 然而,听起来很糟糕,这可能正是你想要实现的方式(当然,取决于你的应用程序,等等 - 文本文件可能没问题),即 - 保持差异地图(每个文件1个差异) )自上次修改以来。不能说我喜欢它,但听起来像fsnotify不支持你需要的变化/差异。

另外,关于你在循环中运行的问题,也许你可以在这里得到一些提示:https://github.com/kataras/iris/blob/8370d76910cdd8de043753ed81ae080eae8dc798/utils/file.go 它是一个框架,允许构建一个监视TypeScript文件更改的服务器。所以听起来与你的案例/问题类似。

干杯, -D