我正在开发一个golang项目,需要索引最近添加的文件内容(使用名为 bleve 的框架),我正在寻找一个解决方案,以获取自上次以来的文件内容修改。我目前的解决方法是记录每个文件的最后一个索引位置,稍后在索引过程中,我只检索从上一个记录位置开始的文件内容。
所以我想知道是否有任何库或内置功能? (不需要限制去,任何语言都可以工作)
如果有人比我的解决方案有更好的想法,我将非常感激!
由于
答案 0 :(得分:0)
如果你在类Unix系统中运行,你可以使用tail
。如果指定跟随该文件,则进程将在到达文件末尾后继续等待。您可以使用os/exec
在程序中调用此项,并将Stdout传递给您的程序。然后,您的程序可以定期或通过阻止从中读取。
我能想到在Go中本地执行此操作的唯一方法就像您描述的那样。还有一个库试图模仿Go https://github.com/hpcloud/tail
中的tail
答案 1 :(得分:0)
这取决于文件的更改方式。
如果文件仅附加,那么您只需记录停止索引的最后一个偏移量,然后从那里开始。
如果更改可以在任何地方发生,并且更改主要是用新字节替换旧字节(比如更改图像的像素),那么也许您可以考虑计算小卡盘的校验和,并且仅索引具有不同校验和的那些块
您可以在Go标准库中查看crypto
包以获取计算哈希值。
如果更改是对文本文件的行插入/删除(如对源代码的更改),那么diff算法可以帮助您找到差异。类似于https://github.com/octavore/delta。