答案1
当然,我无法查看 BibDesk 内部。然而,根据其功能描述,我想说它的主要工作是保存数据库。在该数据库中,它将哈希值与文件关联起来。
然后它会监视它应该监视的文件夹,并查找发生更改的文件。考虑到即使是大型个人文献数据库也不会有数百万个文件,即使重新扫描以验证其发现的文件的哈希值是否仍符合预期,也很难被注意到,特别是在后台完成时。
计算机文件系统上的文件是路径寻址的,而不是内容或哈希寻址的——每个附加的查找信息都需要单独存储。 (您可以在大多数文件系统中存储有关文件的附加信息,但要查找该信息,您需要知道文件的路径 - 因此无法解决您的问题。)
所以,你的答案有点误导——你不能使用文件的内容哈希从文件系统检索文件。 (当然,您可以将文件名更改为哈希值 - 但我认为这不是您的意思。)
但是,出于完整性原因,将哈希值保留在数据库中可能是个好主意(您可以在交付文件之前检查哈希值是否正确),并且正如您所说,如果您有能力跟踪文件更改或频繁重新扫描以进行重新发现原因。
答案2
您可以在 python 或 bash 中执行此操作。
哈希/值数据库可用于存储哈希和值。搜索 gdbm 工具和库。最初的工具起源于 BSD unix,gdbm 是 gnu 版本,现在它们通常不会在标准安装中分发。
我在 ubuntu (20.04) 上安装了 gdbmtool,sudo apt install gdbmtool
以获得一个实用程序来帮助我使用 bash 创建哈希/值对数据库。我sha256sum
再次起诉命令行实用程序来生成文件的哈希值。
我的目标与你的不同,因为我想要一个工具来检测相同的照片(然后是音乐),但我过去已重命名,以便我可以删除重复项,我还将它们全部放在一个目录下,所以我不不搜索整个文件系统。我从一个名为 的工具开始dedupe
,但我发现它对于我的需求来说很麻烦。这是很久以前的事了,现在还有其他工具可以做同样的事情(fslint、dupeguru,...)。
除了数据库的初始创建之外,您还需要定期运行某些程序来在移动(重命名)文件时更新数据库,以设置新路径值、正确的新位置以及在出现新条目时添加新条目。
我认为您不想对文件名路径进行哈希处理,而是对文件的内容进行哈希处理,以便您可以检测在新位置找到的现有相同文件。
一旦获得文件的路径,就可以使用xdg-open
命令行(或脚本)打开它。
如果您想针对同一散列跟踪多个路径,那么关系数据库可能sqlite
更合适,因为这是不允许的键值数据库。但我有点偏离主题(Unix 和 Linux),如果我更进一步的话,我已经给了你一些 Unix 工具的名称,供你搜索和阅读,以帮助你继续前进。
答案3
如果我正确理解你的问题,你可以通过用户 xattrs 来实现这一点。在您使用的发行版中安装 attr 包。例如在 debian/ubuntu 中使用 command sudo apt install attr
。然后阅读man attr
,man setfattr
然后man getfattr
您可以使用这样的命令将哈希保存在文件扩展属性中。
setfattr -n user.md5sum -v $(md5sum test.bin | awk '{print $1}') test.bin
并用命令读取
getfattr -n user.md5sum test.bin
# file: test.bin
user.foo="a7fd41d58563137a6f73e738008d9970"
注意属性名称必须以命名空间为前缀user.