0.1.0 |
|
---|
#30 in #organize
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,以及 ()
表示嵌套表达式。 -q
是 query
命令的别名。此命令将遍历目录并输出满足提供查询字符串的文件列表。这包括具有 "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>
用于使用默认应用程序打开具有指定索引的文件。quit
或exit
将退出交互式模式。
.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