| Crates.io | stowr-cli |
| lib.rs | stowr-cli |
| version | 0.3.0 |
| created_at | 2025-06-24 14:44:04.120242+00 |
| updated_at | 2025-06-26 06:27:26.202538+00 |
| description | A simple CLI tool for file management, including compressing, extracting, renaming, and organizing files. |
| homepage | https://github.com/XiaoLinXiaoZhu/stowr-cli |
| repository | https://github.com/XiaoLinXiaoZhu/stowr-cli |
| max_upload_size | |
| id | 1724415 |
| size | 93,486 |
STOWR是一个由“Store”和“Owe”,两个单词组合而成的名称。它能够实现动态的 压缩/解压 文件功能,实现小文件的优化存储。
当文件被存储时,它对于 STOWR 来说处于“Store”状态;而对于文件读写来说,它处于“Owe”状态。当文件被解压后,它将被从STOWR中删除,STOWR将不再拥有该文件。
当处于“Owe”状态时,文件的内容是不可见的,但是你仍然可以将其重命名、移动或删除。
想要查看文件内容,你需要首先使用 STOWR 将其提取出来,提取之后,stowr 将不再 “store” 该文件,“owe"关系也会被解除。
想想看:stowr owe me_a_file.txt stowr 你欠我一个文件!
STOWR 的去重和差分功能特别适合以下使用场景:
使用示例:
# 存储第一个贴图文件(作为基础文件)
stowr store texture_original.png
# 存储相似的贴图文件(自动使用差分存储)
stowr store texture_modified.png
stowr store texture_lod1.png
stowr store texture_lod2.png
# 存储完全相同的文件(自动去重)
stowr store texture_copy.png
在这个例子中,如果文件具有足够的相似性,系统会自动:
texture_original.png 作为基础文件存储texture_modified.png 等文件存储为差分文件texture_copy.png 作为重复文件引用,不占用额外空间STOWR是一个命令行工具,你可以通过以下命令来使用它:
stowr [COMMAND] [OPTIONS...] [ARGS...]
stowr config <key> <value>
stowr config --list
stowr config storage.path /home/user/files
stowr config --list
可配置项有:
storage.path:指定存储文件的路径。index.mode:指定索引模式,可选择为 auto、json 或 sqlite 作为索引库的实现方式。auto模式下会根据存储的文件数量切换索引方式。当存储文件数目小于 1000 时,使用 json 模式;当存储文件数目大于等于 1000 时,使用 sqlite 模式。multithread:指定多线程数量(默认值1),用于控制压缩和解压操作时启用的线程数量。当设置大于1时,批量操作将使用多线程并行处理以提升性能。compression.algorithm:指定压缩算法(默认值gzip),可选择:
gzip:通用性好,压缩率中等,速度中等(默认选择)zstd:现代高效算法,压缩率高,速度快,推荐用于新项目lz4:压缩速度极快,压缩率较低,适合实时处理场景compression.level:指定压缩级别,不同算法支持不同范围:
dedup.enable:启用/禁用内容去重功能(默认值true),自动检测重复文件并实现零冗余存储delta.enable:启用/禁用差分压缩功能(默认值true),对相似文件使用差分存储技术delta.similarity_threshold:差分压缩的相似度阈值(默认值0.7),范围0.0-1.0,值越高要求相似度越高delta.algorithm:差分算法类型(默认值simple),可选择:
simple:简单差分算法,通用性好,速度快xdelta:高效的二进制差分算法(待实现)bsdiff:专业的二进制差分算法(待实现)压缩算法配置示例:
# 使用zstd高压缩率
stowr config compression.algorithm zstd
stowr config compression.level 15
# 使用lz4高速度(无需设置level)
stowr config compression.algorithm lz4
# 使用gzip兼容性
stowr config compression.algorithm gzip
stowr config compression.level 9
去重和差分存储配置示例:
# 启用内容去重(自动检测重复文件)
stowr config dedup.enable true
# 启用差分压缩(相似文件差分存储)
stowr config delta.enable true
# 设置相似度阈值为80%
stowr config delta.similarity_threshold 0.8
# 查看当前所有配置
stowr config --list
# 针对游戏资源文件的推荐配置
stowr config compression.algorithm zstd # 高压缩率
stowr config compression.level 10 # 中等压缩级别
stowr config dedup.enable true # 启用去重
stowr config delta.enable true # 启用差分
stowr config delta.similarity_threshold 0.7 # 70%相似度
stowr config multithread 4 # 4线程并行处理
stowr store <file>
stowr store --list <file>
stowr store --del <file>
stowr store --list <file> --del
--list,则读取 <file> 中列出的所有路径并依次存储。--del,则在存储完成后删除源文件。stowr store texture.png # 存储单个文件
stowr store --list texture_files.txt # 批量存储纹理文件
stowr store texture.png --del # 存储后删除源文件
stowr store --list models.txt --del # 批量存储并删除源文件
存储优化说明:
# 当存储相似文件时,系统会自动优化
stowr store base_texture.png # 第一个文件:作为基础文件存储
stowr store mod_texture.png # 相似文件:使用差分存储
stowr store copy_texture.png # 重复文件:仅创建引用
# 存储结果可能显示:
# base_texture.png stored as base (compression: 85.2%)
# mod_texture.png stored as delta (similarity: 78.5%, compression: 25.1%)
# copy_texture.png deduplicated (reference created)
通配符支持:
在使用 --list 选项时,文件列表中的每一行都可以使用通配符模式:
* - 匹配单个目录层级中的任意字符(不包括路径分隔符)** - 递归匹配任意深度的目录? - 匹配单个字符(不包括路径分隔符)[abc] - 匹配字符类中的任意一个字符排除模式支持:
文件列表中以 ! 开头的行表示排除模式,用于排除某些不需要的文件:
# 文件列表内容示例 (files_with_exclusions.txt)
src/**/*.rs # 包含src目录下所有.rs文件
!src/**/test*.rs # 排除测试文件
!src/**/mod.rs # 排除模块文件
docs/**/*.md # 包含所有文档
!docs/internal/* # 排除内部文档
stowr owe <file>
stowr owe --list <file>
stowr owe --all
--list,则提取列表中的所有文件。! 开头的行可以排除特定文件。--all,则提取所有已存储的文件。stowr owe texture.png # 提取单个文件
stowr owe --list texture_files.txt # 批量提取文件
stowr owe --all # 提取所有文件
提取过程说明:
# 提取不同类型的文件时的处理过程
stowr owe base_texture.png # 基础文件:直接解压缩
stowr owe mod_texture.png # 差分文件:重建 = 基础文件 + 差分数据
stowr owe copy_texture.png # 引用文件:从原始存储提取
通配符提取示例:
# 文件列表内容示例 (extract.txt)
logs/*.log # 提取所有存储的.log文件
docs/**/*.pdf # 递归提取docs目录下的所有.pdf文件
temp/data_*.json # 提取匹配模式的JSON文件
!logs/debug.log # 排除调试日志文件
!temp/temp_*.json # 排除临时JSON文件
stowr rename <old_name> <new_name>
stowr rename old_name.txt new_name.txt
stowr move <file> <new_location>
stowr move document.docx /backup/
stowr delete <file>
stowr delete temp.log
stowr list
stowr list
输出示例:
Stored Files:
├── textures/base.png [1.2MB → 850KB, 70.8%, Base]
├── textures/modified.png [1.1MB → 180KB, 16.4%, Delta, Similarity: 82.3%]
├── textures/copy.png [1.2MB → 0B, 0.0%, Reference, Refs: 2]
├── models/character.obj [2.5MB → 1.8MB, 72.0%, Base]
└── docs/readme.txt [15KB → 8KB, 53.3%, Base]
Storage Summary:
- Total files: 5
- Unique files: 3
- Duplicates: 1
- Delta files: 1
- Space saved: 2.3MB (65.7%)
stowr search <pattern>
* - 匹配任意字符序列? - 匹配单个字符[abc] - 匹配字符类中的任意一个字符** - 递归匹配目录(用于路径匹配)list 命令一致,包含文件大小、压缩率等信息。stowr search "*.png" # 搜索所有PNG图片
stowr search "**/*.log" # 搜索所有日志文件
stowr search "document.?" # 搜索类似document.x的文件
stowr search "*report*" # 搜索包含report的文件
stowr help
stowr help
stowr version
查看当前工具的版本号。
示例:
stowr version
当 STOWR 首次运行时,它会创建一个配置文件在 ~/.stowr/config.json,该文件包含了默认的存储路径和其他配置项,包括去重和差分存储的相关设置。
数据默认存储在 ~/.stowr/storage/ 目录下。每个存储的文件都会生成一个唯一的标识符,并将其元信息存储在索引系统中(JSON 或 SQLite)。
当你使用 stowr store 命令存储文件时,STOWR 会执行以下智能存储流程:
当你使用 stowr owe 命令提取文件时,STOWR 会根据文件类型执行不同的提取流程:
通过去重和差分存储技术,STOWR 可以显著减少存储空间占用:
典型使用场景的空间节省: