是否有命令行工具可以为文件提供比名称更多的属性?例如,我们有一个名为 的文件ubuntu.pdf
,并为其赋予诸如command-line
, shell
, nautilus
,之类的标签my_favourite_stuff
,以及一个带有标签, , ,的whatever_else
文件linux.pdf
shell
command-line
ln
best_book
我想要一个命令
$ tagged shell
它会输出
file: path_to/ubuntu.pdf, path_to/linux.pdf
related_tags: command-line(2), shell(1), nautilus(1),...
请注意, related_tags 按数字排序,表明有多少文件带有特定相关标签。它在命令行中充当标签云。
我们可以在命令行中实现这种行为(使用硬链接、符号链接、shell 脚本等)吗?
答案1
Linux 文件系统确实具有扩展属性的功能,斯蒂芬在他的回答中表明。
但是:许多(可能是大多数)各种类型的图形编辑器不会截断文件,然后在单击“安全”时用新内容填充同一文件。相反,他们创建一个新文件,并将其重命名为原始文件名。
在该操作中,这些扩展文件属性会丢失,因为它们坚持实际的最后一个文件,而不是文件名。
因此,您确实无法仅在文件系统的基础上“安全”地实现类似的功能。您需要数据库,并将文件名映射到标签。
因此,虽然有照片或歌曲等数据库,但我认为一般文件没有数据库。
编写它并不难 - sqlite 很容易用于从 shell 脚本或 Python 或 C++ 或 Go 编写像这样的简单数据库,但除了你之外没有人使用它。
也许应该坚持原来的桌面搜索引擎,就像由侏儒以跟踪矿工的形式带来的那样!
答案2
您可以将标签存储在扩展属性中(请参阅man setfattr
和man getfattr
有关详细信息),并使用这些命令实现标签探索命令。使用扩展属性的好处是可以将它们与附加到的文件一起复制/移动(例如在 Linux 上使用cp --preserve=all
)。
主要缺点是您必须列出您关心的所有文件的扩展属性才能构建标签云,这最终可能会很昂贵。