我开始使用 inotify 来监视目录中的更改并使用 rclone 启动备份脚本。所以我想,利用我在 debian 中使用 Recoll 的事实,我可以使用 Recoll 检测到的更改来启动 rclone,而无需 inotify 工作。
我无法在 Recoll 中找到一个清晰的日志文件,它可以告诉我每次更新索引时最后修改或创建的文件。我一直在尝试recoll_status脚本,或尝试使用 xapian-delve 读取 xapiandb,但没有成功。
知道如何获取 Recoll 索引中最后添加或更新的文档的列表吗?
答案1
使用recollindex
检查文件更改是一个有趣的想法,但如果我理解您的用例,则没有必要。 Rclone 已经查看文件大小和修改时间来决定更新内容:
通常,rclone 会查看文件的修改时间和大小,看看它们是否相等。如果设置此标志,则 rclone 将检查文件哈希和大小以确定文件是否相等。
这本质上是同样的事情recollindex
。
使用 mtime 而不是 ctime 来测试文件是否已被修改。除了总是使用的大小之外,还使用时间。
详细信息请查看这里的源代码:
// 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.
因此,rclone
与 进行本质上相同的比较recollindex
,只是更新rclone
远程备份而不是更新索引。您可以按照rclone
当前跑步的方式进行跑步recollindex
。
此外,使用 recoll 的索引来决定需要备份的内容会有许多缺点,例如:
根据
skippedNames
中的条目~/.recoll/recoll.conf
,recollindex 将跳过对许多文件(例如 PNG 和 JPEG 文件)的索引。想必您会希望备份这些文件。该索引不反映文件系统的当前状态;事实上,文件系统很可能在
recollindex
运行时发生变化。因此索引不能用作决定需要更新的内容的可靠方法。
顺便说一下,当以实时监控模式启动时,recoll 不会做任何特殊的事情来检测变化;它正在使用Inotify 或 FAM/GAMIN 在幕后。如果您好奇,这里是源代码相关部分的链接:
该recoll_status.py
脚本只是进行轮询~/.recoll/idxstatus.txt
。这也不会包含已更改文件的完整列表;它只是显示当前正在索引的文件,并且只是偶尔更新,而不是针对每个文件。
// Update the status file. Avoid doing it too often. Always do
// it at the end (status DONE)