给你和 AI Agent 用的 S3 / R2 命令行

blob0 提供支持 ls、put、get、mv、cp、rm、find 和 share 的命令行工具,具备 dry-run、JSON 输出和存储在 macOS 钥匙串中的凭证,并为 Claude Code、Codex 和 Cursor 提供官方 Agent Skill。支持 Cloudflare R2、S3、B2、Wasabi 和 MinIO。

在终端处理日常对象存储任务,也可以让 AI Agent 调用同一个本地程序。CLI 使用你已经在 Blob0 桌面应用中设置的连接配置和凭证。

快速开始

安装 Blob0,在桌面应用中连接存储配置,然后到「设置 → CLI & Skills」复制 CLI 可执行文件路径。

  1. 下载 Blob0,并在 Mac 上首次打开应用。
  2. 进入「设置 → CLI & Skills」,点击 CLI 路径旁的复制按钮。将复制的完整路径粘贴到终端命令或 Agent 的 shell 命令中。
  3. 在 Blob0 中连接并保存配置。存储命令需要该配置的凭证保存在 macOS 钥匙串中,并且当前有有效许可或仍在试用期内。
  4. 默认使用当前激活的连接;也可以加上全局选项 --profile 配置名或 ID 来选择另一项已保存配置。
可选 zsh alias(将路径替换为设置中复制的路径)
alias blob0='/absolute/path/copied/from/Settings'
blob0 profiles

想缩短命令,可以在 shell 配置中添加 alias,或在已加入 PATH 的目录中创建符号链接。复制的可执行文件路径如果含空格,请放在引号中。

命令速查

命令用途
profiles列出已保存的连接配置和当前激活项,不会输出访问密钥。
ls [PREFIX] [-r] [--limit N]列出前缀下的对象,会读取所有分页;-r 将后代对象平铺列出。
stat KEY查看单个对象的元数据。
find [QUERY] [PREFIX] [--glob GLOB] [--min-size SIZE] [--max-size SIZE] [--older-than AGE] [--newer-than AGE] [--sort size|date|name] [--limit N]按名称或完整 key 的 glob 搜索,按大小或时间筛选、排序和限制结果。
usage [PREFIX]汇总前缀下的对象数量与字节数。
cat KEY [--force]将对象原始字节写入 stdout。大于 64 MiB 的对象需加 --force。
put SRC... DEST [-r]上传本地文件或文件夹;上传目录需加 -r,--content-type 可覆盖推断出的类型。
get KEY... DEST [-r]下载一个或多个对象;递归下载会创建目录并拒绝不安全路径。
mv SRC DST [-r]移动对象或递归替换前缀;成功复制后才会删除源对象。
cp SRC DST [-r]在所选存储桶内复制对象或递归替换前缀。
rm KEY... [-r]删除精确 key 或前缀;删除前缀需加 -r,删除不可撤销。
mkdir PREFIX创建一个零字节文件夹标记。
share KEY [--expiry SECONDS] [--upload | --public]生成预签名下载链接、上传链接,或已配置公开域名的 URL。
sync list列出已配置的同步文件夹;只能在桌面应用中运行同步。
skills list | print NAME | export DIR列出、打印或导出内置 Agent Skill。

使用全局选项 --profile 配置名或 ID,在命令前选择已保存的连接。put、get、mv 和 cp 支持 --dry-run、--no-clobber 与 --concurrency N(默认 4,范围 1–32);rm 支持 --dry-run。

输出格式与退出码

dry-run 中的批次项目状态为 planned,不代表上传已经完成
{
  "ok": true,
  "dryRun": true,
  "total": 1,
  "succeeded": 0,
  "skipped": 0,
  "failed": 0,
  "bytes": 0,
  "items": [
    { "src": "./report.csv", "dst": "reports/report.csv", "size": 2048, "status": "planned" }
  ]
}
错误写入 stderr;脚本应同时检查退出码
{"error":{"kind":"...","message":"...","code":null}}

0    成功(允许有跳过项)
1    其他、I/O 或已取消
2    命令用法错误
3–9  not_found、auth、license、config、network、s3、conflict
10   多项批次中存在失败项目

命令结果默认以 JSON 写入 stdout,批量命令还会提供每项状态。cat 输出原始字节,skills print 输出 Markdown;help 和 version 使用命令解析器的纯文本。命令错误以 JSON 写入 stderr;多项批次中的失败项目保留在 stdout 的 items 中,退出码 10 表示应检查这些项目。

安全操作流程

写入前使用 --dry-run 检查计划。它会读取列表或对象元数据来生成计划,不会写入对象数据。检查将影响的 key 和目标路径,确认后再去掉 --dry-run 执行。

--dry-run

put、get、mv、cp、rm 支持预演;只列出计划项目,不执行写入或删除。

--no-clobber

目标已存在时不覆盖。批量操作会跳过已存在项目;非递归的单对象操作会返回冲突。

递归操作

只有确认前缀和所有受影响 key 后才使用 -r。不带斜杠的递归 rm key 可能同时匹配该对象和 KEY/ 前缀。

find 与前缀操作

find 只筛选匹配的 key,不会缩小后续 mv 或 rm 前缀操作的范围。执行递归操作前,先检查前缀下的全部对象。

示例:archive 配置连接到 media-archive 存储桶。find 用于筛选对象年龄;ls 用于查看整个前缀。
blob0 --profile archive find "" exports/ --older-than 90d --sort date
blob0 --profile archive ls exports/ -r
先预览、检查计划中的 key,再重复已审查的命令执行删除
blob0 ls tmp/ -r
blob0 rm tmp/ -r --dry-run
# 检查每个 status 为 "planned" 的项目
blob0 rm tmp/ -r

删除不可撤销。递归删除存储桶根目录(空 key 或 /)时,必须加 --yes-really-delete-everything 才会继续。即使加了确认选项,也应先预览根目录操作,并核对当前配置指向的存储桶。

根目录删除的预览和执行都必须带显式保护参数
blob0 rm "" -r --dry-run --yes-really-delete-everything
# 完整检查计划后再执行:
blob0 rm "" -r --yes-really-delete-everything

AWS CLI S3 命令对照

Blob0 操作的是当前配置中的存储桶,因此参数传对象 key 或前缀,不传 s3://bucket/ URI。下列命令覆盖常见文件操作;Blob0 并不是完整 AWS CLI 的直接替代品。

AWS CLI S3Blob0 CLI
aws s3 ls s3://bucket/logs/blob0 ls logs/
aws s3 cp ./report.csv s3://bucket/reports/blob0 put ./report.csv reports/
aws s3 cp s3://bucket/reports/report.csv ./blob0 get reports/report.csv ./
aws s3 mv s3://bucket/a.csv s3://bucket/archive/a.csvblob0 mv a.csv archive/a.csv
aws s3 cp s3://bucket/a.csv s3://bucket/archive/a.csvblob0 cp a.csv archive/a.csv
aws s3 cp ./dir/ s3://bucket/path/ --recursiveblob0 put -r ./dir/ path/
aws s3 cp s3://bucket/path/ ./ --recursiveblob0 get -r path/ ./
aws s3 cp ./report.csv s3://bucket/reports/ --dryrunblob0 put ./report.csv reports/ --dry-run
aws s3 rm s3://bucket/tmp/ --recursive --dryrunblob0 rm tmp/ -r --dry-run
aws s3 presign s3://bucket/keyblob0 share key --expiry 3600
aws s3 sync ...同步任务只能在 Blob0 桌面应用中运行。blob0 sync list 只读取已保存的同步文件夹配置,不会执行同步或报告实时状态。

单独运行 CLI 改变存储桶后,桌面应用不会实时刷新文件列表。请在 Blob0 中手动刷新或重新打开对应前缀以加载最新列表。

如何在 Blob0、s5cmd、rclone 中选择

这些成熟的开源工具面向不同工作流。s5cmd 将自己定位为支持并行操作的 S3 与本地文件系统工具;rclone 提供面向多种云存储后端的命令,包括 sync 和 mount 工作流。

Blob0

面向 macOS 桌面使用的对象存储客户端,并提供专注于常见操作的本地 CLI。GUI 和 CLI 共用已保存配置与钥匙串凭证;官方 Skill 可教会支持它的 Agent 使用命令。

s5cmd

开源、专注 S3 的命令行工具,支持本地文件和对象的并行操作。可用于大批量任务和 shell 自动化。

rclone

开源命令行工具,支持更多存储后端,以及更广泛的传输、同步和挂载工作流。可用于跨服务商脚本和服务器任务。

Blob0 CLI 不包含 s5cmd 或 rclone 的全部命令、挂载能力或通用同步能力。按自动化和规模选择合适工具;Blob0 的特点是 Mac 图形界面、CLI、连接配置和钥匙串共用一套本地设置。实际表现也取决于 Mac、网络和存储服务商。

上传到 R2 并分享链接

以下命令也适用于 Cloudflare R2 以外的已配置 S3 兼容服务。目标是当前配置所选存储桶里的 key 前缀。

先预演并上传文件夹,再创建一个有效期为一天的预签名下载链接
blob0 put -r ./photos media/ --dry-run
blob0 put -r ./photos media/ --no-clobber
blob0 share media/photos/cover.jpg --expiry 86400

预签名链接的有效期会限制在 1 秒到 7 天,默认 1 小时。--upload 生成预签名上传 URL;--public 使用配置中的公开基础 URL,它不是有到期时间的预签名链接。预签名 URL 等同于持有者凭证:只要签名和存储权限有效,任何持有链接的人都可以使用。

为 AI Agent 配置 Blob0 Skill

内置的官方 Skill 是一个 SKILL.md 指令文件。可从「设置 → CLI & Skills」导出,也可以使用以下命令。选择 Claude Code、Codex 或 Cursor 使用的 Skills 目录;Blob0 会导出文件,但不会代替你配置 Agent。

查看或导出内置 Skill;导出后路径为 DIR/blob0/SKILL.md
blob0 skills list
blob0 skills print blob0
blob0 skills export ~/.claude/skills

内置 SKILL.md 的开头部分

---
name: blob0
description: Operate a Cloudflare R2 or any S3-compatible bucket with the blob0 CLI. Use to browse, upload files or folders, download, organize, share, audit, or safely clean up the user's storage.
---

# blob0 CLI

Use the desktop binary (path in Settings → CLI & Skills), with a configured
profile and valid license/trial. Credentials stay in the OS keychain.

Skill 负责教 Agent 如何使用本地 CLI。Agent 仍需能够访问这台 Mac 的 shell,也需要和用户运行命令时相同的 Blob0 连接配置、凭证及有效许可或试用期。

CLI 不是 MCP Server

Blob0 提供的是本地可执行程序,用户或 Agent 可通过终端或 shell 工具运行。Skill 是这套命令的工作流说明。Agent 可以复用已有 shell 权限,读取 JSON 输出和批次中每项状态,并检查进程退出码。Blob0 目前没有提供 MCP 工具;使用 CLI 不需要额外运行服务或配置 MCP。无法运行本地 shell 命令的 Agent 不能使用这项 CLI 集成。

凭证安全

访问密钥保存在 macOS 钥匙串中。CLI 连接时读取所选配置对应的凭证;profiles 列表只包含连接元数据,不含访问密钥或 Secret。不要把凭证写进命令参数,也不要长期保存或记录预签名 URL。

支持的服务商

Blob0 配置支持 Cloudflare R2、Amazon S3、Backblaze B2、Wasabi、MinIO、阿里云 OSS、腾讯云 COS 或其他 S3 兼容 endpoint。各服务商仍需使用匹配的 endpoint 设置,并受其 API 兼容范围限制。

常见问题

使用 CLI 时需要打开 Blob0 吗?

桌面应用提供已安装的可执行程序、已保存配置和钥匙串凭证。先打开 Blob0 完成设置;存储操作还需要有效许可或仍在试用期内。

它能完全替代 AWS CLI 吗?

可用它通过 Blob0 配置操作对象和文件,但它不提供 AWS CLI 的全部云服务、IAM、存储桶管理或同步命令。

AI Agent 可以上传或删除文件吗?

具备本地 shell 权限的 Agent 可以运行相同命令。请谨慎授权其操作范围;写入或删除前可用 --dry-run 审查计划。

--dry-run 会修改存储内容吗?

不会执行对象写入或删除。CLI 仍可能读取对象列表或元数据来生成计划,因此会发出读取请求。

可以在终端运行已配置的同步任务吗?

不可以。blob0 sync list 只读取已保存的文件夹配置,且不会提供最近运行状态;请在 Blob0 桌面应用中启动和查看同步。

CLI 上传后 Blob0 会自动刷新吗?

独立 CLI 进程不会触发桌面应用实时刷新。请手动刷新或重新打开受影响的前缀以读取最新列表。

开始使用 Blob0

下载 macOS 应用,连接已有存储桶,再到「设置 → CLI & Skills」复制 CLI 路径。