标记系统。使用非分级标记组织文件。

protagonist的Python项目详细描述


主角实现了一个tagsystem:它用于非层次地标记文件,以便可以通过布尔查询找到它们。 主角通过使用特殊目录和链接来连接表示标记系统的特定文件系统结构(如下所述)。

(有关用法示例,请参见examples.rst.)

此项目的一个主要设计限制是提供与Tahoe-LAFS备份存储的无缝兼容性。 tahoe lafs备份将使用一个目录并递归地备份每个子目录中的文件。 它没有符号链接的本机表示。

结构

tagsystem结构是在一个名为“.protogent/”的特殊目录中定义的。

每一个已有的标签,都有一个子目录,名为“主角/标签”,还有一个子目录。 任何标记为t的文件在目录t中都有一个唯一的标识符和一个硬链接。

更一般地说,未来的一个特性是,标记系统支持键-值对,目录为“.protogrant/key/value/”

唯一标识符

对于唯一的文件标识,主角在标记时使用内容的(20字节)blake2散列,其文件扩展名与原始文件相同。 基于内容的哈希的潜在优势是:

  • 从文件移动中恢复。
  • 发现未标记的文件(也可以使用inode)。
  • 同一文件的多个副本的标识。
  • 启用不可变文件的完整性检查。

对可变文件使用基于内容的散列不会有这些优势,尽管它可以用于帮助澄清意图,例如,允许用户特别列出应该保持不变的文件。

使用硬链接会对删除已标记的文件产生影响。使用符号链接,删除或移动的文件将留下断开的链接。对于硬链接,需要有特殊的逻辑来确定文件是否存在于标签系统之外。 这是在命令行界面中实现的,它包装rmmv

真名

使用唯一id的一个问题是,现在用户无法识别tagls的结果。 这会激发truenames索引。

这个项目的部分目标是将底层文件系统的目录结构用作一个可以用作数据结构的基元。 因此,我希望避免符号链接和数据库,而采用文件系统机制。

我选择的设计是创建一个名为“truenames”的特殊目录,其中有一个名为file id的文件,其内容是真正的路径名。 这与实现符号链接非常相似。 它本质上是符号链接,但是隐藏符号链接,在inode表中没有标记为隐藏符号链接,因此后面没有通常跟随符号链接的命令。

方法

标记系统支持:

  • 添加和删除标记
  • 标记和取消标记文件
  • 使用布尔组合查询
  • 干净地从文件系统中删除和移动文件,即使它们已被标记。

创建标记系统

标记系统是用文件的第一个标记自动创建的。 标记系统的创建是等幂的。如果已经有了标记系统,就不会有任何改变。

解除文件标记

当我们希望o从文件中删除标记t,f:

  • 如果f是唯一带有标记t的文件,那么标记t也应该从标记系统中删除。
  • 由于具有相同内容的文件具有相同的文件ID,因此在未标记f但标记了相同文件f'的情况下请求取消标记f可能会导致取消标记错误的文件副本。因此,必须注意确保f是文件中的正确链接。为此,我们将使用索引节点而不是内容哈希。

删除标记

即使某些文件具有标记,也可以执行标记删除。这些链接就会消失,如果我的文件没有标记,它就会从truenames索引中删除。

依赖关系

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中模拟按键?   尽管元素存在,但HtmlUnit中的java ElementNotFoundException   在Java中,长双精度并发写入不是原子的吗?   java如何在另一个对象数组中打印对象的int值?   java在显示或更改视图后执行一些代码   java JFR:读取时发生OutOfMemoryError。jfr文件   java Android助手检查是否购买   java这种设计模式的好处是什么?   Weblogic 10.3中针对托管服务器的java部署问题   java如何获取字符串。在编译时投诉的格式   声明字符串数组时发生java错误   java JPA在多个并行线程中从表中删除时发生死锁   java Android:在按钮动画之后启动活动   java并发与JMS主题在春季   使用Lucene spatial search/DateRangePrefixTree进行java日期范围查询?   java可选接口问题   JavaDbUnit没有在每个方法之后清洗和插入数据库,所以测试不是独立的   java在IAIK PKCS11包装器中一对私钥和证书如何匹配?