在 linux 中标记文件的好方法是什么?

jul*_*ien 82 linux search file-management tags

我一直在寻找一种方法来标记我的文件并根据这些标签搜索/过滤它们。

这是我的(更新的)要求:

  • 用户可读的任何文件都可以自由标记
  • 用户可以搜索匹配一个或多个标签的文件
  • 文件可以四处移动而不会丢失以前关联的标签
  • 系统可以轻松备份
  • 不依赖任何桌面环境
  • 如果涉及任何 gui,则必须有 cli 回退

我一直希望有一些基本的文件系统和 coreutils 来处理这个问题,但我还没有认真考虑过这个问题。
同时,我将回顾这里提到的 beagle 和 metatracker,看看它们的表现如何。


好的,所以小猎犬有巨大的 gnome 依赖项,跟踪器也不错,但仍然有一些我不喜欢的依赖项...

一直在做更多的研究,要走的路很可能是扩展文件属性
这是大多数最新文件系统的本机解决方案,但它们还没有得到很好的支持(大多数 coreutils 默认销毁它们,例如 cp 需要 -a 标志来保留它们)。想听听关于使用它们的一些想法,同时我自己尝试一些技巧,尽管这可能需要提出一个新问题。

Pau*_*ane 28

I've just released an alpha of my new program that attempts to provide this functionality. It currently meets some, but not all, of your requirements. It may be of interest to you anyway. It provides a command-line tool for tagging and a virtual file-system for browsing (where tags are represented by directories).

http://www.tmsu.org/

any file readable by the user can be tagged freely

Yes.

a user can search for files matching one or several tags

Yes. Either via the command-line tool or by browsing the tag directories in the virtual file-system.

files can be moved around without losing the previously associated tags

不会。但是应用程序会存储标记文件的指纹,这些指纹用于帮助识别移动的文件。提供了一个“修复”命令,它将更新移动文件的路径。(显然,如果文件被移动和修改,这种机制就会失效。)

系统可以轻松备份

是的。这是一个简单的 Sqlite 3 数据库文件。

不依赖任何桌面环境

是的。没有依赖关系,因为它可以作为一个虚拟文件系统运行,所以它可以在任何支持符号链接的程序中作为一个文件系统来细读。

如果涉及任何 gui,则必须有 cli 回退

目前没有图形界面。


Cha*_*art 15

目前还不清楚你想要什么样的搜索。如果您希望它在 unix 中的任何地方工作,而不仅仅是您的主目录,并且您只想进行基于路径名的搜索,那么以下方案是可行的,有一点 shell 技巧,并使用标准locatedb

  1. 每个包含至少一个标记文件的目录都需要一个标准的子目录,比如.path-tags;
  2. 目录 $FILE 中带有链接 $TAG(不应包含 char _)的每个文件都有一个链接$TAG_$FILE -> ../$FILE

我把locate-tag脚本的细节留给你;它应该是两行或三行,仅使用locate命令和 shell 黑客。(如果你有兴趣,我可以写一个)。

一些 KDE 小伙伴谈到了这种元数据方案,尽管我不记得细节了。

还应该可以基于此方案使用类似的脚本进行更复杂的内容检查测试find

关于更新要求的想法

  1. 用户可读的任何文件都可以自由标记- 是的,应该没问题
  2. 用户可以搜索匹配一个或多个标签的文件- 同样
  3. 文件可以四处移动而不会丢失先前关联的标签- 它们所在的目录可以自由移动,但是如果文件从目录中移动,我们就有麻烦了。如果标签采用这种形式$TAG_$INODE_$FILE并且我们有一种有效的方法来找到哪些路径具有给定的 inode,那么我们可以这样做,只有当我们移出文件系统时才会丢失标签。复制文件可能会带来一些麻烦,这显然比我最初的建议更复杂。
  4. 系统可以很容易地备份- 不是本质上的困难。
  5. 不依赖任何桌面环境- 无
  6. 如果涉及任何 gui,则必须有一个 cli 回退——这就是我们住的地方!

后记您在对(1) 的回答中向我展示 的链接(2)所描述的“反向 inode-lookup”文件可用于提供一些额外的基础设施。我们可以在反向查找文件上运行一个服务,它检查标签文件名中给出的每个 inode 是否与标签指向的文件(如果有)的 inode 匹配。如果没有匹配,则可以执行所需的手术(inode 还存在吗?它在哪里?),并且反向查找文件被变异或重新生成,并且标签符号链接被更新。

我预计会遇到一个棘手的情况:如果标记文件不在标记所说的位置,反向查找文件说它仍然存在,但浪子文件不在查找文件所说的位置,查找文件不在日期?有几种方法可以处理这种情况,但都不是很理想。除此之外,这整个任务似乎是 Perl 非常适合的那种事情......

  • 我错过了重点,什么软件可以解决这个问题?我希望有一些我可以随意使用而无需编写自己的基础设施的东西。(但很简单,以便我可以在需要时自己扩展) (2认同)

小智 7

没有人提到,但您绝对应该查看扩展文件系统属性。例如 ext4 有它们。有工具 getfattr 和 setfattr 来处理它们。当然,您必须编写一些 shell 脚本来搜索带有 sometag 标记的文件。关于提到的问题,所有答案都是“是”。您应该只考虑它依赖于文件系统。


lar*_*els 6

我认为这可能满足您的所有要求。无论如何,这是一段很酷的代码:

http://pages.stern.nyu.edu/~marriaga/software/oyepa

GUI 需要 Qt,但有一个用于搜索的命令行应用程序,并且所有标签实际上都在文件名中的事实使得从 cli 操作标签|文件变得微不足道。


Dan*_*scu 6

惊讶没有人提到TagSpaces。它满足您的所有要求,因为标签存储在文件名中,并且 TagSpaces 是跨平台的。

标签空间


小智 5

您可能不需要为其标记库 Nepomuk 安装整个 KDE 桌面。不过,您仍然需要安装 KDE 基础库...