基于 bun 开发一个cli 工具,兼容 linux 和 windows 系统,索引数据库使用 sqlite。 nodejieba 进行入库前预分词,实现中文模拟匹配。 ## 概念 - 库 - 一个普通的文件夹。内部文件作为视频存储以索引的存储。所有名字以 . 开头的文件和文件夹都不是视频文件,自动忽略。索引数据库为 .mm/index.db。 - 种子中文件与库中文件共有三种关联方式。 - hash。使用基于 sha1 的文件内容 hash。 - 文件名。 - 文件大小。文件大小相同可以认为是同一个文件。 - fileid 由数据库分配,拷贝的两个文件路径和名字不同,fileid 不同。 - 电影扫描。遍历文件夹,确保数据库中的索引和文件夹对应,以文件夹为准校对数据库中的内容。 - 忽略所有 . 开始的文件、以及 .torrent 文件。 - 如果有文件名和长度都一致,hash 就不用计算了,节省一次计算资源。 - 如果是对新增的文件夹扫描,直接使用 sha1sum 批量计算,不要一个一个文件计算。 ## 命令 - mm use [[path]] 将路径 path 设置为当前库。写入配置文件持久保存,除非明确切换。配置文件保存在当前用户目录的 ~/.mm/config.json 中。如果不存在创建。库中的索引数据库如果不存在,则创建。 - mm tscan 扫描 torrent ,如果库内不存在则添加,如果重复不做处理。默认只扫描库的根目录下和 downloads 目录下的种子文件。 - mm tinfo [[torrent name/id]] [-a] torrent name 使用模糊匹配 torrent id 由数据库生成唯一值,直接匹配。 没有传递 -a 参数查找 torrent name/id ,并列出种子内的相关信息。如果有多个,都列出。 传递 -a 查找指定的种子中文件是否在库中存在。如果能在.bf 中找到 file_id 也打印出来,不然打印 undefined。 - mm tout [[torrent id]] 将种子重新导出为一个文件,放到库的根目录。 - mm vscan [folder][-r] 仅支持 linux folder 文件或文件夹,相对库的路径。传递 folder 时,只扫描相对库路径下的 folder 目录或文件。不传递时默认为全库扫描。 -r 参数控制扫描下一级子目录。默认不扫描。 - mm vtag [-d] [[file_id]] [[tag name]] 没有传递 -d 参数给指定文件打标签,如果标签不存在,先创建标签。 传递 -d 参数,移除文件上的标签。但不删除标签本身。