前一段时间,我跑过雷科尔它在一个分区上创建了一个数据库,以便我可以快速搜索该分区中所有文件(文本文件、pdf、djvu、html 等)内容中的所有文本信息。
现在Recoll创建数据库的分区被意外删除了,但是我仍然可以在Recoll中搜索那些被删除的文件,因为Recoll的数据库存储在另一个没有受到影响的分区中。
当我在这些已删除文件的文本内容中搜索关键字时,我仍然可以看到该关键字周围的一两行作为其上下文,这给了我一些希望,即有可能恢复每个已删除文件的文本内容。但是,当我对 Recoll 找到的已删除文件点击“预览”或“打开”时,Recoll 会尝试打开不再存在的文件,这当然会失败。 所以我想知道是否可以从Recoll的数据库中恢复已删除的文本文件?
当我在这些已删除文件的文本内容中搜索关键字时,我还可以看到找到的每个文件的完整路径, 所以我想知道我是否可以从Recoll的数据库中恢复我的分区的目录结构?
感谢致敬!
答案1
首先,我对您的数据丢失表示哀悼。这个答案可能在事后近 8 年后对你没有用处,但我会回答它,希望它对其他人有用。
我想知道是否可以从 Recoll 的数据库中恢复已删除的文本文件?
是的,您可以恢复重建的文档文本,但有一些注意事项。
我想知道我是否可以从 Recoll 的数据库中恢复我的分区的目录结构?
是的,您可以恢复文件路径并从那里重建目录结构,同样有一些注意事项。
xadump
这可以通过以下命令来完成recoll
:
这转储文件命令是由 Recoll 索引器组织的 Xapian 索引的低级访问和诊断工具。使用选项指定要使用的索引目录-d。
选项 -D、-X、-T 和 -r 取单个多西德用选项指定的参数-我。-D显示文档数据记录。
[。 。 。 ]
-r打印根据索引数据重建的文档文本。
[。 。 。 ]
有选项-q,xadump 使用给定的术语参数对索引执行简单的 AND 查询。
https://www.lesbonscomptes.com/recoll/manpages/xadump.1.html
因此,例如,要搜索“独立”,此命令将起作用:
xadump -d ~/.recoll/xapiandb/ -q 'independence' | less
查询结果的第一部分对我来说如下所示:
DB: ndocs 100204 lastdocid 105155 avglength 7675.26
DB: terms are stripped
Performing query `Query(independence)'
Estimated results: 659
结果之一如下所示:
文档 ID 89464 98% [url=file:///home/nathaniel/Dropbox/archive/2020/personal/projects/public-domain-documents/declaration-of-independence-html/index.html
mtype=文本/html
fmtime=01585682999
原始字符集=utf-8
f 字节=9365
pcbytes=9365
分字节=8124
sig=93651585683000
Caption= 美利坚合众国独立宣言
摘要=?!#@ 美利坚合众国独立宣言 在人类事件的过程中,一个民族有必要解散将他们与另一个民族联系在一起的政治势力,并承担起其他国家的权力。这
文件名=index.html
]
这样你就可以看到file://
带有路径的 URL:
/home/nathaniel/Dropbox/archive/2020/personal/projects/public-domain-documents/declaration-of-independence-html/index.html
当然,要重建完整的目录结构,您必须对每个文档执行此操作。将其自动化可能是可行的,但要正确执行它也很棘手且耗时。这也无助于重建 recoll 未索引的文件。
我们可以使用以下命令重建文档文本:
xadump -d ~/.recoll/xapiandb/ -i 89464 -r
这给出了这个(为了简洁,我截断了第三行):
数据库:ndocs 100204 Lastdocid 105155 avglength 7675.26
DB:条款已被删除
XP XPhome XPnathaniel XPDropbox XParchive XP2020 XPpersonal XPprojects XPpublic-domain-documents XPdeclaration-of-independence-html XCFNXXST XCFNindex.html XCFNhtml XCFNXXND SXXST 美利坚合众国独立宣言 SXXND XSFNXXST index.html html XSFNXXND XXST 美国独立宣言美利坚合众国,在人类事件的过程中,一个民族有必要解散将他们与另一个民族联系在一起的政治束缚,并在地球列强中承担自然法和法律的独立和平等的地位。自然之神赋予他们对人类意见的适当尊重,要求他们声明促使他们分离的原因[...]
这是原始 HTML 文件:
<h1>
THE DECLARATION OF INDEPENDENCE OF THE UNITED STATES OF AMERICA
</h1>
<p>
When in the Course of human events, it becomes necessary for one people to
dissolve the political bands which have connected them with another, and to
assume, among the Powers of the earth, the separate and equal station to
which the Laws of Nature and of Nature's God entitle them, a decent respect
to the opinions of mankind requires that they should declare the causes
which impel them to the separation.
</p>
请注意,这确实包含重建的文本,但存在一些问题:
没有大写。一切都是小写的。
没有标点符号。
没有换行符。一切都在一条线上。
这也不仅仅是 HTML;它还包括 HTML。以下是古腾堡计划纯文本版本“理智与情感”的恢复文本的一部分:
理智与情感 简·奥斯汀 1811 第一章 达什伍德家族早已在苏塞克斯定居,他们的庄园很大,他们的住所位于庄园中心的诺兰公园,世世代代他们都过着受人尊敬的生活。获得周围熟人的普遍好评
这是原文:
SENSE AND SENSIBILITY
by Jane Austen
(1811)
CHAPTER 1
The family of Dashwood had long been settled in Sussex. Their estate
was large, and their residence was at Norland Park, in the centre of
their property, where, for many generations, they had lived in so
respectable a manner as to engage the general good opinion of their
surrounding acquaintance.
https://www.gutenberg.org/cache/epub/161/pg161.txt
请注意,输出包括lastdocid 105155
.考虑到这一点,以下是转储重建文本的脚本的草稿:
#! /usr/bin/env bash
IMAX=105155
for ((i=1;i<=IMAX;i++))
do
xadump -d ~/.recoll/xapiandb/ -i "$i" -r > "$i.txt"
done
在我的机器上,对前 100 个文档执行此操作大约需要 3 秒,因此对于完整的 100,000 个文档,可能需要不到一个小时。