使用 recollindex 更新备份文件

使用 recollindex 更新备份文件

我开始使用 inotify 来监视目录中的更改并使用 rclone 启动备份脚本。所以我想,利用我在 debian 中使用 Recoll 的事实,我可以使用 Recoll 检测到的更改来启动 rclone,而无需 inotify 工作。

我无法在 Recoll 中找到一个清晰的日志文件,它可以告诉我每次更新索引时最后修改或创建的文件。我一直在尝试recoll_status脚本,或尝试使用 xapian-delve 读取 xapiandb,但没有成功。

知道如何获取 Recoll 索引中最后添加或更新的文档的列表吗?

答案1

使用recollindex检查文件更改是一个有趣的想法,但如果我理解您的用例,则没有必要。 Rclone 已经查看文件大小和修改时间来决定更新内容:

通常,rclone 会查看文件的修改时间和大小,看看它们是否相等。如果设置此标志,则 rclone 将检查文件哈希和大小以确定文件是否相等。

https://rclone.org/docs/

这本质上是同样的事情recollindex

使用 mtime 而不是 ctime 来测试文件是否已被修改。除了总是使用的大小之外,还使用时间。

https://www.lesbonscomptes.com/recoll/usermanual/webhelp/docs/RCL.INSTALL.CONFIG.RECOLLCONF.TERMS.html

详细信息请查看这里的源代码:

// File signature and up to date check. The sig is based on
// m/ctime and size and the possibly new value is checked against
// the stored one.

https://framagit.org/medoc92/recoll/-/blob/d8edbcbc55cf7658af025212b7f01acd293d7884/src/index/fsindexer.cpp#L651

因此,rclone与 进行本质上相同的比较recollindex,只是更新rclone远程备份而不是更新索引。您可以按照rclone当前跑步的方式进行跑步recollindex

此外,使用 recoll 的索引来决定需要备份的内容会有许多缺点,例如:

  • 根据skippedNames中的条目~/.recoll/recoll.conf,recollindex 将跳过对许多文件(例如 PNG 和 JPEG 文件)的索引。想必您会希望备份这些文件。

  • 该索引不反映文件系统的当前状态;事实上,文件系统很可能在recollindex运行时发生变化。因此索引不能用作决定需要更新的内容的可靠方法。

顺便说一下,当以实时监控模式启动时,recoll 不会做任何特殊的事情来检测变化;它正在使用Inotify 或 FAM/GAMIN 在幕后。如果您好奇,这里是源代码相关部分的链接:

https://framagit.org/medoc92/recoll/-/blob/ef1b8343fad5ef1b04714a3031b207bee458ca40/src/index/rclmonprc.cpp

https://framagit.org/medoc92/recoll/-/blob/ef1b8343fad5ef1b04714a3031b207bee458ca40/src/index/rclmonrcv.cpp

recoll_status.py脚本只是进行轮询~/.recoll/idxstatus.txt。这也不会包含已更改文件的完整列表;它只是显示当前正在索引的文件,并且只是偶尔更新,而不是针对每个文件。

// Update the status file. Avoid doing it too often. Always do
// it at the end (status DONE)

https://framagit.org/medoc92/recoll/-/blob/d8edbcbc55cf7658af025212b7f01acd293d7884/src/index/recollindex.cpp#L122

相关内容