基于 IPFS 的分布式文件系统命令行工具,提供简单易用的文件管理界面。
- 文件上传/下载到 IPFS 网络
- 目录树形结构浏览
- 文件标签管理和分类
- 回收站机制(软删除)
- 智能文件搜索(支持通配符、标签、类型、大小过滤)
- 文件信息查看和统计
- 进度显示和彩色输出
- Shell 自动补全支持
- Rust 1.70+ (编译时需要)
- IPFS 守护进程 (ipfs daemon)
git clone <repository-url>
cd dfs
cargo build --release编译后的二进制文件位于 target/release/dfs
chmod +x install.sh
./install.sh脚本会自动:
- 编译发布版本
- 安装到
/usr/local/bin/dfs - 创建配置文件和数据目录
- 生成 Shell 补全脚本
直接使用已编译的 dfs.exe,或从源码编译:
cargo build --release
# target\release\dfs.exe- Linux/macOS:
~/.config/dfs/config.toml - Windows:
%APPDATA%\dfs\config.toml
[general]
auto_pin = true # 自动固定上传的文件
show_progress = true # 显示进度条
default_tags = [] # 默认标签
log_level = "info" # 日志级别: error, warn, info, debug, trace
[ipfs]
api_url = "http://127.0.0.1:5001" # IPFS API 地址
gateway_url = "http://127.0.0.1:8080" # IPFS 网关地址
[metadata]
db_path = "~/.local/share/dfs/metadata.db"
cache_dir = "~/.local/share/dfs/cache"
[ui]
theme = "auto" # 颜色主题: auto, light, dark
use_icons = true # 使用图标生成示例配置文件:
dfs config --init查看配置文件位置:
dfs config --path使用 DFS 前,请确保 IPFS 守护进程正在运行:
ipfs daemondfs status
dfs status --verbose # 详细信息
dfs status --json # JSON 格式输出# 列出根目录
dfs ls /
# 列出指定路径
dfs ls /documents
# 详细信息
dfs ls / -l
# 递归列出
dfs ls / -r
# 显示所有文件(包括隐藏)
dfs ls / -adfs tree /
dfs tree /documents
dfs tree / -s # 显示文件大小
dfs tree / --mtime # 显示修改时间# 上传单个文件(本地路径在前,DFS 路径在后)
dfs upload ~/file.txt /myfile.txt
dfs upload ~/file.txt /myfile.txt -f # 强制覆盖
# 上传目录(自动递归)
dfs upload ~/mydir /mydir注意: DFS 路径使用 / 分隔,不需要 dfs: 前缀。
# 下载文件到本地(DFS 路径在前,本地路径在后)
dfs download /myfile.txt ~/downloads/file.txt
# 下载目录(自动递归)
dfs download /mydir ~/downloads# 重命名/移动 DFS 系统中的数据
dfs mv /oldfile.txt /newfile.txt
dfs mv /olddir /newdir -f # 强制覆盖# 移动到回收站(软删除)
dfs rm /file.txt
dfs rm /dir -r # 递归删除目录
# 强制删除(无需确认)
dfs rm /file.txt -f
# 永久删除(直接从 IPFS 移除)
dfs purge /file.txt# 按文件名查找(支持通配符 * 和 ?)
dfs find "*.pdf"
dfs find "document?"
# 按标签过滤
dfs find "*.jpg" --tag photo
# 按文件类型过滤
dfs find "*" --mime "image/*"
# 按大小过滤
dfs find "*" --size ">1MB"
dfs find "*" --size "<100KB"
# 限制结果数量
dfs find "*" --limit 10# 添加标签
dfs tag /file.txt --add important work
# 删除标签
dfs tag /file.txt --remove old-tag
# 列出文件标签
dfs tag /file.txt --list
# 清空所有标签
dfs tag /file.txt --cleardfs info /file.txt
dfs info /file.txt --json # JSON 格式dfs du / # 查看根目录
dfs du /documents -h # 人类可读格式
dfs du / --total # 显示总计# 列出回收站内容
dfs trash --list
# 恢复文件
dfs trash --restore /file.txt
# 清空回收站
dfs trash --clean
# 查看回收站统计
dfs trash --stats# 导入 IPFS CID 到 DFS 系统
dfs import QmHash... /imported-file.txt
dfs import QmHash... /imported-file.txt --pin # 自动固定
dfs import QmHash... /imported-file --tag imported # 添加标签
# 强制覆盖已存在的文件
dfs import QmHash... /file.txt -f# 使用默认程序打开
dfs open /file.txt
# 使用系统默认程序打开(非视频文件)
dfs open /file.txt --app# 查看文件在本地和 IPFS 中的存储位置
dfs where /file.txt# 显示当前配置
dfs config --show
# 显示配置文件位置
dfs config --path
# 创建示例配置文件
dfs config --init
# 验证配置
dfs config --validate生成并安装 Shell 自动补全:
mkdir -p ~/.local/share/bash-completion/completions
dfs --completion bash > ~/.local/share/bash-completion/completions/dfsmkdir -p ~/.local/share/zsh/site-functions
dfs --completion zsh > ~/.local/share/zsh/site-functions/_dfsmkdir -p ~/.config/fish/completions
dfs --completion fish > ~/.config/fish/completions/dfs.fishDFS 系统使用统一的路径格式:
- 路径分隔符: 使用
/(与 Linux 一致) - 根目录: 空字符串
""(内部表示),显示为/ - 示例:
/documents/file.txt表示根目录下的 documents 目录中的 file.txt
所有路径操作都会自动规范化:
- 解析
.和.. - 去除多余的
/ - 处理相对路径
确保 IPFS 守护进程正在运行:
ipfs daemon检查配置文件中的 API 地址是否正确。
- 检查磁盘空间
- 检查网络连接
- 查看日志:
RUST_LOG=debug dfs status
默认数据库位置:
- Linux/macOS:
~/.local/share/dfs/metadata.db - Windows:
%APPDATA%\dfs\metadata.db
# 开发版本
cargo build
# 发布版本(优化)
cargo build --releasecargo testdfs/
├── src/
│ ├── main.rs # 程序入口
│ ├── lib.rs # 库入口,模块导出
│ ├── cli.rs # 命令行参数定义
│ ├── commands.rs # 命令实现
│ ├── dfs_path.rs # DFS 路径类型(内部相对路径存储)
│ ├── local_path.rs # 本地路径类型(支持 ~ 展开)
│ ├── metadata.rs # 元数据管理(SQLite)
│ ├── ipfs/ # IPFS 客户端
│ │ ├── mod.rs
│ │ ├── files.rs # 文件操作
│ │ ├── pin.rs # 固定操作
│ │ ├── routing.rs # 路由操作
│ │ └── types.rs # 类型定义
│ └── utils.rs # 工具函数
├── Cargo.toml # 项目配置
├── config.toml # 配置文件
└── install.sh # 安装脚本
- DfsPath: DFS 虚拟路径类型,内部以相对路径存储,显示时自动添加
/前缀 - LocalPath: 本地文件系统路径类型,自动展开
~到用户主目录 - 元数据: 使用 SQLite 存储文件信息,
path字段使用相对路径格式
MIT OR Apache-2.0