Skip to content

bzwang-phys/dfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DFS - 分布式文件系统命令行工具

基于 IPFS 的分布式文件系统命令行工具,提供简单易用的文件管理界面。

功能特性

  • 文件上传/下载到 IPFS 网络
  • 目录树形结构浏览
  • 文件标签管理和分类
  • 回收站机制(软删除)
  • 智能文件搜索(支持通配符、标签、类型、大小过滤)
  • 文件信息查看和统计
  • 进度显示和彩色输出
  • Shell 自动补全支持

系统要求

  • Rust 1.70+ (编译时需要)
  • IPFS 守护进程 (ipfs daemon)

安装

从源码编译

git clone <repository-url>
cd dfs
cargo build --release

编译后的二进制文件位于 target/release/dfs

使用安装脚本 (Linux/macOS)

chmod +x install.sh
./install.sh

脚本会自动:

  • 编译发布版本
  • 安装到 /usr/local/bin/dfs
  • 创建配置文件和数据目录
  • 生成 Shell 补全脚本

Windows

直接使用已编译的 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

使用指南

启动 IPFS

使用 DFS 前,请确保 IPFS 守护进程正在运行:

ipfs daemon

基本命令

查看系统状态

dfs status
dfs status --verbose   # 详细信息
dfs status --json      # JSON 格式输出

列出文件和目录

# 列出根目录
dfs ls /

# 列出指定路径
dfs ls /documents

# 详细信息
dfs ls / -l

# 递归列出
dfs ls / -r

# 显示所有文件(包括隐藏)
dfs ls / -a

树形显示目录结构

dfs 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 --clear

查看文件信息

dfs 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

导入已有 CID

# 导入 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 补全

生成并安装 Shell 自动补全:

Bash

mkdir -p ~/.local/share/bash-completion/completions
dfs --completion bash > ~/.local/share/bash-completion/completions/dfs

Zsh

mkdir -p ~/.local/share/zsh/site-functions
dfs --completion zsh > ~/.local/share/zsh/site-functions/_dfs

Fish

mkdir -p ~/.config/fish/completions
dfs --completion fish > ~/.config/fish/completions/dfs.fish

路径规范

DFS 系统使用统一的路径格式:

  • 路径分隔符: 使用 /(与 Linux 一致)
  • 根目录: 空字符串 ""(内部表示),显示为 /
  • 示例: /documents/file.txt 表示根目录下的 documents 目录中的 file.txt

所有路径操作都会自动规范化:

  • 解析 ...
  • 去除多余的 /
  • 处理相对路径

常见问题

IPFS 连接失败

确保 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 --release

测试

cargo test

项目结构

dfs/
├── 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

About

Distributed file system based on the IPFS.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published