命令行子命令

命令行子命令 #

除了直接运行 ./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, --recursivefalse是否递归监听子目录
--overwritefalse覆盖存储上已有的文件, 而非跳过
--initial-scanfalse启动时将目录中已存在的文件也上传
--debounce2s文件最后一次写入后, 等待多久再上传
--upload-workersconfig.workers并发上传数
--retry-delay3s上传重试之间的延迟
写入完成检测: 监听器会按文件做防抖处理, 仅当文件大小在一个 debounce 窗口内保持不变时才上传, 因此不会上传未写完的半成品文件.
若某文件在上传过程中又被修改, 它会在当前上传完成后再上传一次, 而不是被重复排队.

示例:

# 递归监听 ./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 客户端来执行上传.
`watch` 子命令与 Bot 内的 `/watch` 命令 (监听 Telegram 聊天) 无关. 本子命令监听的是**本地文件系统目录**, 不依赖 Telegram.