s3-turbo-list · Rust CLI

约 19 秒列出一百万对象

自动发现可并行的工作。大规模 list 与 diff。输出 Parquet。

RustApache-2.0 v0.39.0 (2026年9月30日) S3-compatibleParquetAgent-safe JSON

第三方基准测试 · 阿里云 OSS

单流对比 -c 8

阿里云 OSS 上的 1M 个对象,由第三方实测,数据引自项目 README。列举速度受限于服务商每秒响应的请求数。

单流与 -c 8 的完成耗时
约 55s 约 19s 单流 约 55s -c 8 约 19s

均为报告中的近似值。实际结果取决于桶的结构和服务商的请求速率上限。

弄清有什么,差了什么

迁移、排查或盘点之前,先回答这两个问题。

LIST

桶里有什么

一个桶写成 Parquet 对象 list,不必先调扫描参数。

DIFF

两端差了什么

两端并行列举、按 key 合并,得到一份标出相同、缺失和变化的 Parquet。

不负责同步对象 它不复制对象,也不替代存储浏览器,只为后续判断留下可靠依据。

扫描计划随桶而定

有结构的地方先并行展开,仍然耗时的长尾片段再继续拆分。

  1. 1

    识别结构

    先探测真实的前缀边界,再开始递归扫描。

  2. 2

    并行列举

    按边界展开并行任务,不必预先准备 hints 文件。

  3. 3

    处理长尾

    仍有可用余量时,才拆分耗时的片段。

  4. 4

    写出 list

    留下可分析的对象 list,而不只是终端输出。

扩大扫描前,先确认端点行为

已验证:AWS S3已验证:MinIO已验证:百度 BOSPreset:Cloudflare R2Preset:OSSPreset:B2

AWS S3、MinIO 和百度 BOS 走过项目的兼容性验证;R2、OSS、B2 提供 preset。无论哪种端点,长任务前都先运行 compat-probe。

v0.39.02026年9月30日发布说明 ›

开始使用

从 GitHub Release 下载对应平台的二进制,用 SHA256SUMS 校验后放进 PATH。

  1. 本地预检,不访问 S3

    s3-turbo-list doctor
    查看实际输出
    OK    binary_version: 0.39.0
    OK    working_directory: /tmp/inventory
    OK    config_parse: resolved configuration is valid TOML/CLI state
    OK    config_file: no config file (searched ./s3-turbo-list.toml and ~/.s3-turbo-list.toml); built-in defaults apply
    OK    aws_profile: AWS_PROFILE is not set; the AWS SDK uses its default credential chain
    OK    provider: no provider preset; plain S3 settings apply
    OK    endpoint_url: no endpoint URL: requests go to AWS S3 (pass --endpoint-url or --provider for another service)
    SKIP  proxy: the request host depends on the bucket and region (virtual-hosted or AWS endpoint), which doctor does not take; the run log names the proxy, if any, for each resolved endpoint
    SKIP  network: doctor is a local preflight and does not contact S3 endpoints; use compat-probe to validate an endpoint
    Resolved: provider -, endpoint -, addressing auto, concurrency 100, threads 4
    Doctor status: ok
  2. 完整递归清单 → out/ 里的 Parquet

    s3-turbo-list list --bucket my-bucket --region us-east-2 --output-dir out

常见问题

aws s3 ls 不够用吗?

小规模、临时查看时,aws s3 ls 通常就够了。s3-turbo-list 面向大规模盘点和可重复对比,这时结果输出和恢复能力更重要。

需要准备 hints 文件吗?

不需要。list 会自己探测真实的 CommonPrefixes 边界。hints 文件只是反复盘点时的可选控制。

启动发现做了什么?

每次运行都先用几次 delimiter 探测找到真实的 CommonPrefixes 边界,不在工作目录里缓存。没有前缀的扁平命名空间改用 single-key 探测拆分,单个前缀下的大型扁平目录(如 data/ 下的 data/part-…)也一样,所以每次运行都能并行展开。

中断的任务能接着跑吗?

能。每次中断的 list 运行都会在 Ctrl-C 或 SIGTERM 时保存 checkpoint。用同一个 --output-dir 加上 --resume 再跑一次,只列举尚未写出的 key 范围;续跑的输出只含这些范围,需要与中断那次的输出合并。进程崩溃时保留上一次的 checkpoint,diff 和 --start-after 运行不保存 checkpoint。

s3-turbo-list