#tags #file #archive #search #organize #text-file #cli-tool

已删除 fstore-rs

用于标记和搜索文件的命令行工具。有关更多信息,请参阅README.md。

0.1.0 2023年12月2日

#30 in #organize

GPL-3.0-only

86KB
2K SLoC

fstore

fstore 是一个工具,允许您将标签和描述附加到文件上,然后稍后根据标签查询和检索文件。这是用于文档或图片等大型文件归档的理想选择。

动机

目录树不是组织大型文件归档的好方法。目录树中一组目录为什么比另一组目录高一级,背后永远没有明确的逻辑。您很容易陷入深层次的目录树,这使得导航困难,难以检索您要查找的文件。 fstore 正是为了解决这一问题而编写的。将任意标签与文件关联,是一种更灵活、更强大的文件组织方式。这允许您使用任何组合的标签来搜索文件。这也让您拥有相对扁平的目录结构,便于查找您要查找的文件。

尽管有其他工具提供类似的功能,但 fstore 被设计得简单、可靠且适合长期归档。您的所有标签和元数据都存储在纯文本文件中。如果您移动或复制一个目录,包含该目录和其中所有文件的元数据的纯文本文件(s)也会随之移动或复制。因为 fstore 使用纯文本文件,所以它非常适合长期归档,因为它让您完全拥有您的数据。

安装

Fstore是用Rust编写的。它还不是crate,但您可以通过运行以下命令克隆此仓库并使用cargo安装它:

cargo install --path /path/to/fstore/repo/

用法

.fstore 文件包含所有元数据,即文件和目录的标签和描述。您可以将 .fstore 文件放在文件系统中的任何位置,放在您希望使用标签组织的任何目录中。每个 .fstore 文件都应该包含包含该 .fstore 文件的目录以及该目录的直接子文件的元数据,即 .fstore 文件的兄弟文件。它不应包含任何嵌套目录的元数据。嵌套目录应使用它们自己的 .fstore 文件。以这种方式保持元数据去中心化非常重要,这样当您移动或复制目录时,不会使元数据无效。

按照设计,fstore 从不修改 .fstore 文件。 .fstore 文件由用户创建,并由 fstore 消费和查询。作为一位 Emacs 用户,我自己编写了这个主要模式 fstore-mode,它提供了自动完成、文件预览等功能,使创建 .fstore 文件变得简单(我还没有为其他编辑器编写插件,但如果您喜欢 fstore,请随时贡献!)。有关 .fstore 文件的更多详细信息将在后面讨论。

fstore 命令行工具

此查询将从工作目录递归遍历目录结构,并打印带有 "my-tag" 标签的文件列表。

fstore query my-tag

您可以编写复杂的查询并使用标签组合布尔表达式。用于组合布尔表达式的符号是:& 表示 AND,| 表示 OR,! 表示 NOT,以及 () 表示嵌套表达式。 -qquery 命令的别名。此命令将遍历目录并输出满足提供查询字符串的文件列表。这包括具有 "my-tag" 和 "other-tag" 且没有 "exclude-tag" 或同时具有 "tag1" 和 "tag2" 的文件。

fstore -q 'my-tag & other-tag & !exclude-tag | (tag1 & tag2)'

以下命令将遍历目录并确保所有 .fstore 文件都是有效的,即它们包含的元数据没有被重命名、移动或删除文件而失效。

fstore check

以下命令将列出给定目录或文件的标签和描述。描述是用户编写的字符串,用于描述文件。

fstore whatis path/to/my/file

如果您想修改元数据,edit 命令将打开给定目录中的 .fstore 文件到您的默认编辑器。如果没有提供目录,则假定当前工作目录。

ftore edit path/to/directory
# OR
fstore edit # Edit working directory

当您开始标记大量现有文件时,您可能无法一次性为所有文件编写元数据。查看未跟踪的文件列表,即未分配任何元数据的文件列表,通常很有用。此命令将生成未跟踪文件列表。

fstore untracked

此命令将递归遍历目录并生成所有标签的列表。由于此命令递归地遍历目录,如果目录不包含 .fstore 文件,则忽略它。假设您不希望跟踪该目录中的文件,它们不会被报告为未跟踪。

fstore tags

大多数 fstore 子命令会从当前工作目录递归遍历目录,并生成您请求的输出。如果您想从不同路径生成相同的输出,而不是从当前工作目录,您可以通过提供 --path | -p 标志来覆盖它。

fstore --path different/starting/directory

Bash 自动补全

当搜索文件时,您可能记不起应搜索的确切标签。为标签和命令提供自动补全功能可能非常有用。要在 bash 中启用 tab 自动补全,请将以下内容添加到您的 bash 配置文件中

complete -o default -C 'fstore --bash-complete' fstore

交互式模式与 TUI

如果您真的不知道要查询哪些标签,交互式模式可能非常有用。它会递归遍历所有目录,加载所有元数据,并启动一个带有 TUI 的交互式会话。您将看到所有跟踪文件的列表,以及这些文件具有的所有标签的并集。您可以通过查看标签列表来找出要搜索的内容,或者开始键入类似 filter tag1 & tag.. 的内容,让自动补全帮助您找到正确的标签。如果您按回车键,文件列表将过滤到仅满足查询的文件。类似地,您也应该看到标签集合缩小。您可以迭代地细化搜索,直到找到要查找的文件。

在交互式模式下,您还可以使用以下命令

  • reset 用于移除当前过滤器
  • whatis <index> 用于查看当前列表中文件的标签和描述。您通过文件索引而不是名称或路径来选择文件。
  • open <index> 用于使用默认应用程序打开具有指定索引的文件。
  • quitexit 将退出交互式模式。

.fstore 文件

`.fstore` 文件的格式应为一个标题,然后是标题下的内容,然后是另一个标题,依此类推,直到文件末尾。支持的标题有:`desc` 用于描述,`tags` 用于标签和 `path` 用于文件路径和通配符。标题应位于自己的行上,用 `[]` 括号中,类似于 TOML 或 INI 文件。因此,一个典型的 `.fstore` 文件可能看起来像

[desc]
This is the description of this directory.
The description can span multiple lines and paragraphs.

[tags]
tag1 tag2 tag3 tag4
tag5
tag6

[path]
my_file_1.pdf
[tags]
ftag1 pdf document

[path]
my_file_2.pdf
[desc]
This is my second file.
[tags]
ftag2 pdf document

出现在 `.fstore` 文件开头的标签和描述标题与目录本身相关联。出现在 `path` 标题之后的标签和描述标题与该特定文件或通配符相关联。 path

图形模式

理论上,可以使用标签渲染一个 Zettelkasten 风格的图形,其中文件表示为节点,任何共享标签的两个文件都通过边连接。这与过滤的组合结合使用,可以是一种强大的、直观的搜索大量文件的方法。这尚未实现。在这个阶段,这只是一个正在形成中的想法。

依赖关系

~8–18MB
~228K SLoC