Skip to content

Latest commit

 

History

History
384 lines (254 loc) · 15 KB

index.md

File metadata and controls

384 lines (254 loc) · 15 KB

FileManagement

实例

文件列表

  • *.git
  • index.md >>>>> 模组主体文件的副本
  • backup.md >>>>> 备份说明

调用

Security.KeyBankApi()

Security提供了密钥库,密钥/函数索引可以在密钥库查询到对应的密钥/密钥生成函数。

Security.StandardMethod()

Security提供标准的加密文件和字符串方法。(AES256参数)

Handler.TaskAdd()

提交backup.md中的任务到Handler中。

接口

DomainApi()

提供了在Domain区 创建/删除/修改 领域 的权限和功能。

CasualApi()

提供了在Casual区 创建/删除/访问 临时文件夹/存放临时文件夹的文件 的权限和功能。

正文

在本文中

  • 关键词 MUST、MUST NOT、REQUIRED、SHALL、SHALL NOT、SHOULD、SHOULD NOT、 RECOMMENDED、MAY、OPTIONAL 依照 RFC 2119 的叙述解读。

  • 当文件或文件夹名出现尖括号时<内容>,代表这部分需要被替换为合理的值。

概述

文件管理主要顾及效率、秩序、安全。主要分为结构机制两部分。

结构分为五大区域。其中

  • Domain是五大区域中最活跃最重要的。

  • Casual仅在有临时需求时使用,Backup与Archive很少使用,Environment主要起辅助作用。

Domain中以领域为基本单位。领域是某主题相关文件集合,各领域之间相对独立保证基本秩序。领域内部自由分类以提升效率

领域是一种对象,创建领域时要注意对象的特性。

graph RL
    subgraph 结构
        subgraph 缓冲层
            Casual
        end
        subgraph 活动层
            Environment
            Domain
        end
        subgraph 仓储层
            Archive
            Backup
            Domain[(Domain)]-->|封存|Archive
            Archive-->|复出|Domain
            Domain-.->|备份|Backup
            Archive-.->|备份|Backup
        end
     end
    subgraph 机制
        标签-.->Domain
        对象-.->Domain
        备份
        加密
        工具
    end
click 结构 "#结构" _blank
click Domain "#Domain" _blank
click Environment "#Environment" _blank
click Archive "#Archive" _blank
click Backup "#Backup" _blank
click Casual "#Casual" _blank
click 标签 "#标签" _blank
click 备份 "#备份" _blank
click 加密 "#加密" _blank
click 工具 "#工具" _blank
click 对象 "#对象" _blank
Loading

结构

个人的各块储存空间^各硬盘分区、网盘等^分别划为五块区域(按需删减)。

英文名 中文名 描述 作用
Domain 领域 长期活动领域 集合领域资源
Casual 临时 提供临时空间或存放临时文件 中转、实验、临时空间等
Environment 环境 运行所需的基本环境 存放软件、辅助文件、脚本等辅佐生产文件
Archive 存档 非活跃领域存放处 暂时封存领域
Backup 备份 重要文件的备份 容灾

Casual

本区域存放临时存放文件的文件夹和临时文件夹示例

结构 命名格式 作用
临时存放文件的文件夹(Stage) S_<文件夹名> 固定的临时存放文件区域(一般是应用固定输出路径)
临时文件夹(Temporary) T_<文件夹名> 临时创建(也可随时删除)文件夹

Environment

本区域存放软件等辅助正常工作的事物。

  • 本二级结构命名**(MUST)**只能由英文字母、数字、下划线组成(不能以数字开头)^有特殊字符的目录容易产生错误^
  • 各软件必须**(MUST)**安装于各自的独立文件夹(三级结构)中(建议用软件安装时的默认文件夹名)示例

Domain

本区域存放活跃中的领域

Archive

本区域存放封存状态下的领域

Backup

存放文件备份。

  • 当磁盘空间不足时,会优先清理备份。所以Backup不能作为文件孤本存档处。
  • 备份区是文件运行的容灾机制,所以不做严格规范。

创建备份库

备份库(MUST)是有B_前缀的文件夹,存放备份。

一般(MAY)一个对象(以及其所有子对象)对应一个备份库,命名格式(MUST)为B_<备份库标题>_<备份库识别号(12位)>

相关建议

备份库中的内容(MAY)有三大类

  1. 可变对象的增量备份,(RECOMMENDED)建议添加A_前缀
  2. 不可变对象的备份,(RECOMMENDED)建议添加I<保存年限>_前缀
  3. 可变对象的快照备份,(RECOMMENDED)建议添加M<保存年限>_<备份时间>_前缀(备份时间的格式建议参照标准标签中的时间标签(t))

对象

对象是文件夹(或可以转化为文件夹的文件(如压缩包)),(MUST)带有索引标识符

分为不可变对象可变对象两种。可变对象内可以(MAY)存放不可变对象,但不可变对象内不能(MUST NOT)储存可变对象。

考虑到储存空间往往不是完整的一块,对象可以(OPTIONAL)分散储存

备份

备份是(正常工作机制之外的)容灾机制,不强制执行。

全域的详细备份方式以及备份计划记录在backup.md中(无格式要求),并将其中的任务事项通过Handler.TaskAdd()提交到Handler。

标签

标签(格式)是文件信息的摘要,提高文件搜索效率。

  • 在对象内部使用标签时,需要(MUST)先将其加入到索引的tag_list.yml。
  • 标准标签是必须(MUST)使用的标签,自定义标签可以根据模板编写。
  • 考虑到文件名长度限制,过长的信息可以储存在索引的tag_extension.yml。详细方式记录在tag_list.yml中。

加密

文件和字符串的加密方式使用Security.StandardMethod()

加密文件都需要(MUST)添加密钥/函数索引标签k。密钥/函数索引是字符串,注记密码。

密钥/函数索引所对应的真实密钥或密钥生成函数可以在Security.KeyBankApi()查询到。

工具

https://github.com/IceTiki/TikiEssential_Tools

附录

说明

结构分区依据

运行此系统最稀缺的资源是精力磁盘空间。本体系通过价值和状态两个维度分类,将文件系统分为三层。

缓冲层是低价值/价值待定的文件,一般是临时文件,应尽快处理(清理)。

仓储层是长期封存的文件,无需关注。

活动层是生产、生活的核心,也是本系统的核心

低/待定价值 有价值
封存 仓储层ArchiveBackup
活跃 缓冲层Casual 活动层(DomainEnvironment

领域

命名格式(MUST)为<主题>_<标识符>

领域是可变对象

领域是可变对象,拥有可变对象的所有特性。(MUST)有索引和标识符,(OPTIONAL)可以创建子对象。

领域以主题富集相关文件

创建领域的目的是富集某个方面的文件以提高使用效率。领域内部文件彼此都有较强的联系。各领域相对独立

领域不追求MECE(不重复不遗漏)。

  • 以单一的标准分类文件,容易使某些区域文件过多,而某些区域文件过少。不契合使用习惯。
  • 固定的标准无法适应人随时间的变化。

其内部文件分类基本不作限制

减少限制,提升效率。

领域一般(SHOULD)涵盖范围广,活跃时间长(数年甚至数十年)。一般(SHOULD)同时活跃的领域不会超过个位数。

人的精力一般集中在少数几个较大的方面(比如主业、生活)等。

对于过大的领域可以考虑拆分(比如将生活拆分为生活影像、生活日记等)

可以创建“集散”领域,短期感兴趣的项目可以置入集散库中。

领域状态:活跃与封存

领域有两种状态:活跃/封存。分别存放在Domain/Archive中。

领域按照以下步骤转为封存状态时(转为活跃状态时反之):

  • (MUST)添加A<保存年限>_前缀。存档年限为四位数年份,超出年限存档即可(MAY)清理。(永久存档填9999)

  • (RECOMMAND)建议加密压缩

  • (MUST)将领域从Domain移动到Archive

备注:领域的子对象可以(OPTIONAL)单独封存;但领域的父对象封存时,子对象也必须(MUST)封存。

对象说明

索引

索引是名为.fmi_<id>文件夹(模板生成工具),保存对象的元信息。

  • index.yml——此区域的信息
  • tag_list.yml——此区域通行的标签列表
  • tag_extension.yml——标签的额外信息,见标签

标识符

对象都必须(MUST)在文件/文件夹名中标示标识符,可以以_<标识符>作为后缀或用i标签

可变对象的标识符格式为<英文和数字组成,长度为12的随机字符串>

不可变对象的标识符格式为<英文和数字组成,长度为16的随机字符串>

子对象的标识符格式为<父对象标识符>_<英文和数字组成,长度为8的随机字符串>

import random
for i in range(60):
    print(str().join(random.choices(
        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=8+4*(i % 3))))

不可变对象

不可变对象的内容不可(MUST NOT)变动,一个标识符对应一份内容。

创建不可变对象或改变其内容时,必须(MUST)新生成标识符

可变对象

可变对象的内容可以变动。但在同一时间同一标识符的对象内容必须(MUST)完全相同。

换而言之,仅当完全自动同步的文件夹两个文件夹,可以用同一标识符同时出现在两个地方。

子对象

对象可以创建子对象以分散储存压力。

子对象空间是对象(父对象)空间的一部分,所以子对象空间的一级子文件夹或一级文件**(MUST NOT)**都不能与其他子对象或父对象的一级子文件夹或一级文件重名。

标签格式

标签以#开始,最后一个标签以##结束。标签可以转换为字典。

示例格式

其他字符**#标签1=值1#标签2=值2##其他字符#标签3=值3##**其他字符

读取为json形式

{"标签1":"值1","标签2":"值2","标签3":"值3"}

标签分为格式标签(值有强制格式规定)以及自由标签(值没有强制格式规定)

标签的值

标签中的值可以是字符串、列表或字典。(列表和字典可以互相嵌套)

  • 字符串不需要符号包裹,纯数字字符串也视作字符串。

  • 列表以[]包裹,以,分割值。

  • 字典以{}包裹。以,分割键值对,以=分隔键与值。

若一个标签出现多次,则按出现顺序打包为列表。

转义

转义字符为 `

  • 系统文件名保留字符需要转义。(windows: \ / : * ? " < > |)
  • 以下特殊字符作普通字符时需要转义
    • 转义字符`` #`、`=`、`,`、`{`、`}`、`[`、`]`

示例

值类型 示例格式 读取为json
字符串 #标签1=这是一个[字符串]#标签2=还是1个,字符串## {"标签1":"这是一个[字符串]","标签2":"还是1个,字符串"}
列表 #标签=[这是,3,句话]## {"标签":["这是","3","句话"]}
字典 #标签={年=2021,月=8,日=16}## {"标签":{"年":"2021","月":"8","日":"16"}}
多次标签 #标签=[出现,一次]#标签=再次出现## {"标签":[["出现","一次"],"再次出现"]}
嵌套 #标签={xxx=12,yyy=[yxx=random]}## {"标签":{"xxx":"12","yyy"=["yxx":"random"]}}
转义 #标签=`[这是一,个字=符`#串## {"标签":"[这是一,个字=符#串"}
转义 #标签=[项`,目1,项`]目2]## {"标签"=["项,目1","项]目2"]}

示例

Casual结构示例

S_甲下载器下载目录

S_手机照片自动同步目录

S_待分类

T_甲脚本临时测试区

T_乙压缩包临时解压区

Environment结构示例

  • AppData
    • qq缓存
    • TIM缓存
    • ...
  • Applications
    • TIM
    • qq
    • ...
  • Component
    • java7
    • mingw
    • ...
  • Tools
    • typora
    • git
    • ...
  • Entertainment
    • minecraft
    • ...
  • AssistFile
    • icon
    • script
    • ...