Files
SaveAny-Bot/docs/content/zh/usage/cli.md
krau c9bb6c9e3c feat(docs): add CLI subcommands documentation and file naming strategies
- Introduced new documentation for CLI subcommands: `upload` and `watch`, detailing their usage, flags, and examples.
- Added a section on file naming and conflict strategies, explaining how users can customize file names and handle duplicates via `/config` and `/fnametmpl` commands.
- Translated the new documentation into Chinese for broader accessibility.
2026-06-28 18:00:02 +08:00

3.5 KiB

title, weight
title weight
命令行子命令 21

命令行子命令

除了直接运行 ./saveany-bot (不带子命令) 启动 Telegram Bot 外, 这个二进制文件还提供两个把本地文件上传到存储后端的辅助子命令: upload (一次性) 和 watch (持续监听).

这些子命令会读取与 Bot 相同的 config.toml, 初始化数据库和缓存, 然后执行任务. 它们不会启动 Telegram Bot 本身, 但 telegram 类型的存储会在需要上传时临时启动 Bot 客户端来执行上传.

upload — 上传单个文件

saveany-bot upload -f <文件> -s <存储名> [-d <目录>] [--no-progress]

参数:

参数 必填 说明
-f, --file 待上传的本地文件路径
-s, --storage 目标存储名 (必须存在于 config.toml)
-d, --dir 存储中的目标目录, 默认使用存储的 base_path
--no-progress 关闭终端进度条

示例:

# 上传文件到 "MyAlist" 的默认目录
./saveany-bot upload -f ./movie.mp4 -s MyAlist

# 上传到指定子目录
./saveany-bot upload -f ./movie.mp4 -s MyAlist -d movies/2026

# 通过 Telegram 存储上传并关闭进度条
./saveany-bot upload -f ./photo.jpg -s MyChannel --no-progress

watch — 监听目录并自动上传

watch 子命令持续监听一个本地目录, 将新建或修改的文件上传到存储后端, 并保留相对监听根目录的子目录结构.

saveany-bot watch -p <路径> -s <存储名> [-d <目录>] [选项]

参数:

参数 默认值 说明
-p, --path (必填) 要监听的本地目录
-s, --storage (必填) 目标存储名
-d, --dir 存储的 base_path 存储中的目标目录
-r, --recursive false 是否递归监听子目录
--overwrite false 覆盖存储上已有的文件, 而非跳过
--initial-scan false 启动时将目录中已存在的文件也上传
--debounce 2s 文件最后一次写入后, 等待多久再上传
--upload-workers config.workers 并发上传数
--retry-delay 3s 上传重试之间的延迟

{{< hint info >}} 写入完成检测: 监听器会按文件做防抖处理, 仅当文件大小在一个 debounce 窗口内保持不变时才上传, 因此不会上传未写完的半成品文件.
若某文件在上传过程中又被修改, 它会在当前上传完成后再上传一次, 而不是被重复排队. {{< /hint >}}

示例:

# 递归监听 ./inbox 并且把新文件上传到 "MyAlist"
./saveany-bot watch -p ./inbox -s MyAlist -r

# 自定义目标目录并覆盖已有文件
./saveany-bot watch -p ./inbox -s MyAlist -d backup --overwrite

# 启动时把 ./inbox 中已有的内容也一并上传
./saveany-bot watch -p ./inbox -s MyAlist --initial-scan

行为说明

  • 相对子目录结构会被保留: 以 --path ./inbox 为例, 写入 ./inbox/sub/file.txt 的文件会被上传到 <目标目录>/sub/file.txt.
  • watch 会一直运行直到被中断 (如 Ctrl-C / SIGINT), 退出前会等待所有进行中的上传完成.
  • 重试次数遵循 config.toml 中的全局 retry 值, 各次重试之间间隔 --retry-delay.
  • telegram 类型的存储会自动启动 Bot 客户端来执行上传.

{{< hint warning >}} watch 子命令与 Bot 内的 /watch 命令 (监听 Telegram 聊天) 无关. 本子命令监听的是本地文件系统目录, 不依赖 Telegram. {{< /hint >}}