You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验不同AWS账号下的两个Amazon S3存储桶的文件是否一致

跨AWS账号S3存储桶文件对比实现方案

前提条件

  • 本地已安装配置AWS CLI,且已配置两个AWS账号的命名配置文件(可自定义命名,示例中使用account1、account2指代两个账号的配置名)
  • 两个账号的访问凭证均已获得对应S3存储桶的s3:ListBucket权限

方案1:仅通过AWS CLI + 系统命令实现(适合10万级以下文件量)

S3控制台没有内置的跨桶对比功能,你可以直接通过以下CLI命令快速完成对比:

  1. 分别导出两个存储桶的全量对象键(文件名)列表
# 导出账号1下bucket-a的文件列表
aws s3 ls s3://bucket-a --recursive --profile account1 | awk '{print $4}' > bucket-a_list.txt
# 导出账号2下bucket-b的文件列表
aws s3 ls s3://bucket-b --recursive --profile account2 | awk '{print $4}' > bucket-b_list.txt
  1. 执行对比命令生成三类结果
# 两个桶共有的文件列表,输出到common_files.txt
comm -12 <(sort bucket-a_list.txt) <(sort bucket-b_list.txt) > common_files.txt
# 仅在bucket-a存在的独有文件列表,输出到bucket-a_only.txt
comm -23 <(sort bucket-a_list.txt) <(sort bucket-b_list.txt) > bucket-a_only.txt
# 仅在bucket-b存在的独有文件列表,输出到bucket-b_only.txt
comm -13 <(sort bucket-a_list.txt) <(sort bucket-b_list.txt) > bucket-b_only.txt

以上命令适用于Linux/macOS环境,Windows环境可通过WSL、Git Bash运行

方案2:需同时校验文件内容一致性的场景

如果需要确认相同文件名的文件内容是否完全一致,可以导出带ETag的列表做对比:

# 导出bucket-a带ETag的对象列表
aws s3api list-objects-v2 --bucket bucket-a --profile account1 --query "Contents[].[Key, ETag]" --output text | sort > bucket-a_etag.txt
# 导出bucket-b带ETag的对象列表
aws s3api list-objects-v2 --bucket bucket-b --profile account2 --query "Contents[].[Key, ETag]" --output text | sort > bucket-b_etag.txt
# 用comm命令对比即可,只有文件名和ETag都匹配才会判定为相同文件

其他说明

  • 千级文件量的情况下,上述方案全程仅需几秒即可完成
  • 如果是百万级以上的超大文件量,可以先开启两个桶的S3 Inventory功能导出全量清单,再对清单文件做对比即可

内容的提问来源于stack exchange,提问作者Sabo Boz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:24:06