我正在尝试找出在 GNU/Linux 中标记文件的最佳解决方案。这是我正在努力实现的具体目标。我下载所有电影并将它们保存在外部 SSD 上。我将它们分类在两个目录中:“watched”和“to_watch”。但是,我想为每部电影分配属性,例如(但不限于):主要演员、导演、类型。这样,如果我有大量文件并且我想观看斯科塞斯导演的电影,我可以只显示包含“斯科塞斯”标签的电影。
以下是我的一些要求:
- 我希望该解决方案独立于我正在使用的本地计算机。例如,如果我将外部 SSD 带给同样拥有 Unix 系统的朋友(并安装了标签所需的解决方案),他的计算机也将能够解释我生成的所有标签。
- 我想要一个 CLI 选项。
- 如果我更改文件的位置,标签仍保留在文件中。
- 我可以为该文件分配多个标签。
- 我可以标记任何格式的文件。
- 我也可以标记目录(不仅仅是文件)。
答案1
两件事情:
1.
更原生的方式当然是利用很多Unix文件系统的一个特性来保存所谓的扩展属性要不就扩展属性。你可以使用getfattr
和setfattr
命令行程序从文件中查询、设置、修改和删除这些属性(在Linux下,不太了解*BSD如何处理这些);您应该对他们的手册页感兴趣。
然而,这并不是真的很有用 – 毕竟,您有很多文件不知何故标有一些信息,但需要坐在控制台上尝试再次将它们取出。
因此,您真正需要的不仅仅是一种标记文件的方法,您还需要一些东西来实际利用该信息做一些有用的事情,管理它等等。
2.
你所描述的是功能上A电影数据库,因此,媒体服务器可能是最重要的有用解决方案。如果您可以将可能的平台数量限制为一个(或两个),例如 x86_64(也可能是 arm64?),您也可以只放置一个容器在您的外部硬盘驱动器上,其中仅包含运行电影数据库软件所需的所有内容。这样你的朋友就可以开始了(不知道类似的东西是什么样的——也许是一个 DLNA 服务器?)。我对此类事情没有经验。
所以,我要做的,实际上是坐下来编写你想要的软件。听起来很疯狂,但考虑到任何带有 Unix 的现代 PC 风格的硬件都可以访问一些半现代的 Python3,这也很正常。
3.
如上所述,您可以使用扩展文件系统属性来存储有关文件的信息 - 在文件“文件系统条目”本身内。这样,当您将文件移动到驱动器上时,它会保留在文件中。
然而,正如您所说,您可能想从外部驱动器运行某种 GUI/TUI,无论如何,这并没有多大好处。因此,一个简单的 SQLite 数据库(sqlite3
每个 Python 安装都附带)就可以了。然后,您只需编写一个简短的工具来查找数据库文件,查找与之相关的媒体文件,然后添加一些函数来扫描尚不属于数据库的文件,添加它们,也许可以从中查询IMDB 的 API。当然,一个漂亮的查询界面也很好,所以你可以选择“文本冒险”风格,或者你可以使用Textual
(新的,令人兴奋的,可能有点实验性)或urwid
;如果我没记错的话,两者都是纯Python,所以在不同的机器上运行东西应该很简单!