quarkpan 0.4.0

Command-line client for Quark Drive based on libquarkpan
# quarkpan

`quarkpan` 是基于 `libquarkpan` 的夸克网盘命令行工具。

它面向直接使用终端的场景,负责把底层库能力包装成可恢复、可观察、可取消的命令行体验。

## 功能概览

当前命令行支持:

- `auth`
  管理持久化 Cookie
- `list`
  列出目录内容
- `folder create`
  创建目录
- `delete`
  删除一个或多个文件或目录项
- `rename`
  重命名文件或目录项
- `download`
  下载文件
- `download-dir`
  下载整个目录
- `upload`
  上传文件
- `upload-dir`
  上传整个目录

同时支持:

- 仅在交互式 TTY 中显示进度条
- `--color auto|always|never`
- Ctrl+C 取消
- 中断后保留 `.quark.task` 任务文件
- 下载中断后的显式重试与续传
- 上传分片失败后的显式重试
- 下次通过 `-c, --continue` 恢复传输

## TLS Features

`quarkpan` 会把底层 `libquarkpan` 的 TLS backend feature 透传出来,命名与 `reqwest 0.13` 对齐,默认使用 `default-tls`。

示例:

```bash
cargo install quarkpan
cargo install quarkpan --no-default-features --features native-tls
```

## 安装

### 使用 Cargo

```bash
cargo install quarkpan
```

### 从源码运行

```bash
cargo run --bin quarkpan -- --help
```

## Cookie 提供方式

CLI 需要夸克登录后的 Cookie,支持三种方式:

- `--cookie 'k1=v1; k2=v2'`
- `--cookie-file ./cookie.txt`
- 环境变量 `QUARK_COOKIE`
- `auth set-cookie` 持久化到系统配置目录

Cookie 内容应为完整的 `key=value; key2=value2` 格式。
`auth set-cookie` 需要显式指定来源:

- `--cookie`
- `--from-stdin`
- `--from-nano`
- `--from-vi`

## 使用示例

### 列出根目录

```bash
quarkpan --cookie 'k1=v1; k2=v2' list
```

### 持久化 Cookie

```bash
quarkpan auth set-cookie --from-stdin
quarkpan auth show-source
```

也可以显式传入:

```bash
quarkpan auth set-cookie --cookie 'k1=v1; k2=v2'
```

也支持通过标准输入:

```bash
printf 'k1=v1; k2=v2\n' | quarkpan auth set-cookie --from-stdin
```

如果直接在终端运行:

```bash
quarkpan auth set-cookie --from-stdin
```

CLI 会先提示:

```text
paste cookie, then press Enter:
```

也支持通过编辑器:

```bash
quarkpan auth set-cookie --from-nano
quarkpan auth set-cookie --from-vi
```

### 逐页查看更多

```bash
quarkpan --cookie 'k1=v1; k2=v2' list --pdir-fid 0 --more
```

### 创建目录

```bash
quarkpan --cookie 'k1=v1; k2=v2' folder create --pdir-fid 0 --file-name 我的文档
```

### 重命名文件或目录项

```bash
quarkpan --cookie 'k1=v1; k2=v2' rename --fid <fid> --file-name 新名字
```

### 删除一个或多个文件或目录项

```bash
quarkpan --cookie 'k1=v1; k2=v2' delete --fid <fid1> --fid <fid2>
```

### 下载文件

```bash
quarkpan --cookie 'k1=v1; k2=v2' download --fid <fid> --output ./file.bin
```

### 恢复下载

```bash
quarkpan --cookie 'k1=v1; k2=v2' download --fid <fid> --output ./file.bin -c
```

### 下载目录

```bash
quarkpan download-dir --pdir-fid <pdir_fid> --output ./backup
```

### 恢复或合并目录下载

```bash
quarkpan download-dir --pdir-fid <pdir_fid> --output ./backup -c
quarkpan download-dir --pdir-fid <pdir_fid> --output ./backup -c -o
```

### 上传文件

```bash
quarkpan --cookie 'k1=v1; k2=v2' upload --file ./file.bin --pdir-fid 0
```

### 恢复上传

```bash
quarkpan --cookie 'k1=v1; k2=v2' upload --file ./file.bin --pdir-fid 0 -c
```

### 上传目录

```bash
quarkpan upload-dir --dir ./photos --pdir-fid 0
```

### 恢复或合并目录上传

```bash
quarkpan upload-dir --dir ./photos --pdir-fid 0 -c
quarkpan upload-dir --dir ./photos --pdir-fid 0 -c -o
```

## 任务文件说明

下载和上传在中断、报错或收到 Ctrl+C 后,会保留:

```text
${filename}.quark.task
```

目录任务使用与目录同级同名的任务文件,例如:

```text
photos.quark.task
```

用途:

- 下载时记录远端文件身份信息和目标输出路径
- 上传时记录预检得到的上传会话信息和已完成的分片状态

成功完成后,任务文件会自动删除。

`Ctrl+C` 时:

- 当前传输会尽快停止
- 已生成的任务文件会保留
- 不会把取消误当作普通失败继续重试
- 后续可使用 `-c` 恢复

进度条显示规则:

- 只在交互式终端显示
- 定时任务、管道和重定向默认不显示
- 下载和上传都会显示当前文件名

## 当前限制

- 目录和文件操作当前以 ID 为主
- 下载当前只支持按文件 ID
- CLI 当前不负责复杂的路径递归解析
- 上传恢复依赖本地文件内容未变化,因此继续上传前会重新校验 `size/md5/sha1`
- 云端覆盖当前通过删除旧文件后再上传实现
- CLI 已移除 `--json` 输出模式

## License

`GPL-3.0-only`