2016-12-01 78 views
0

我在监视文件更改时遇到问题。我需要能够知道文件何时发生更改,何时发生,我需要添加的新行。我打算分析每一行并找到符合某些标准的行,并根据这些行中的信息采取行动。我知道预期的匹配行数,但我不知道总共有多少行会被添加到文件中,或者匹配行的位置。监视添加的文件并获取最后添加的行

到目前为止,我已经尝试了2个软件包,但都无济于事。

fsnotify/fsnotify

由于FAS我可以告诉大家,fsnotify只能告诉我文件被修改,不是什么修改的细节了。由于我需要知道添加到文件中的内容,这对我来说并不合适。

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

hpcloud/tail

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

委派到tail

我碰到this答案,这表明委派这项工作的tail命令本身,但我想这能跨平台工作(具体的MacOS,Linux和Windows)。我不相信在Windows上存在一个等效的命令。

我该如何解决这个问题?

+1

有什么错与'hpcloud/tail'额外的信息?您仍然可以获得附加数据。 – JimB

+0

@JimB这并不理想,但我可以解决它。我不能使用'hpcloud/tail'的主要原因是因为如果没有换行符,它不会输出最后一行。 – tverghis

+0

你当然可以使用fsnotify,然后根据收到的通知根据需要读取文件。我不知道使用Go编写的更完整的“tail -f”包(但异地推荐无论如何都是脱离主题的) – JimB

回答

0

@ user2515526,

通常改变的差异是出的文件观察家的功能范围,因为,你知道,你可以改变图像,观察者需要在保持跟踪几MB一个diff的内存,以及如果我们有成千上万的文件呢? 然而,听起来很糟糕,这可能正是你想要实现这一点的方式(当然,取决于你的应用程序等 - 对文本文件可能没问题),即 - 保持差异图(每次差异1次文件)自上次修改。不能说我喜欢它,但听起来像fsnotify不支持您需要的更改/差异。

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

干杯, -D