Rust CLI / 对象存储

列举超大 S3 兼容存储桶,不再卡在一条慢分页链上。

s3-turbo-list 适合这样的时刻:一个桶太大、太慢,或者太关键,不能再靠单条顺序列举来理解。它把对象元数据变成可审计的 Parquet 清单,并保留足够 trace 让你事后解释这次运行。

Rust · MIT License · S3-compatible · Parquet · Trace JSONL

$ s3-turbo-list --dry-run --agent \
  --output-dir out --delimiter '' \
  list --region us-east-2 --bucket my-bucket

plan.segments        64
plan.output          out/*.parquet
trace.enabled        true
checkpoint.resume    ready

$ s3-turbo-list manifest-summary run.json --check
artifacts            ok
parquet.rows         verified
exit_code            0
自动 key-space discovery运行时分段拆分Parquet / NDJSON / TSV / summary 输出Dry-run 和 agent-friendly plan

定位

适合场景

需要完整桶清单、迁移基线、前后差异对比,或需要证明某个 provider 的列举行为很慢、很偏斜。

它不做什么

它不是备份系统,也不是图形化存储浏览器。它专注于列举、追踪、导出和对比,把清单交给后续分析工具。

最终留下什么

运行 manifest、checkpoint 状态、S3 调用 trace JSONL,以及适合 DuckDB 或 pandas 分析的 Parquet 等输出。

能力

自动发现分段

启动时探测真实 CommonPrefixes,缓存边界,不需要手工调参就能开始并发递归列举。

Trace JSONL

把每一次 S3 API 调用记录成结构化 JSONL,便于在运行后观察 provider 行为。

断点续跑

从已保存的分段进度恢复中断扫描,并通过身份校验避免错配运行。

可分析输出

默认流式写入 Parquet,也可输出 NDJSON、TSV、summary-only 和 dry-run,适合 shell、CI 和审计流程。

为什么需要它

顺序列举在小桶上没问题,但对象数量一大就会变成一次运维任务。

常规列举工具通常绑定在单条 ListObjectsV2 分页链上。小桶还好,当对象数量达到百万、千万甚至更高时,这会非常痛苦。

s3-turbo-list 会切分 key 空间,并行执行列举,并通过 manifest、trace、checkpoint 和 Parquet 产物让运行过程可审计。

工作流

01

预检

先运行 doctor 或 dry-run,确认输出路径、参数、警告,以及这次任务是否合理。

02

发现

探测 prefix 结构和 key-space 边界,让扫描从一开始就能并行,而不是卡在单条分页链上。

03

扫描

用有界内存、偏斜分段运行时拆分、checkpoint、manifest 和 trace 输出完成递归列举。

04

分析

用 DuckDB 或 pandas 查询 Parquet、对比多次清单,或查看 trace JSONL 解释 provider 行为。

兼容性

面向真实 S3 兼容 endpoint,而不只是假设一切顺利。

AWS S3MinIOCloudflare R2BOSOSSB2

Endpoint preset、compat-probe、trace 输出和校验报告可以帮助你在扩展扫描规模前理解每个 provider 的具体行为。

先 dry-run,再保留 trace。

打开仓库