如何获取两个 S3 存储桶之间的文件差异?



所以我有一个 S3 视频桶(几百个(,我使用 ElasticTranscoder 将所有内容转码为第二个优化的存储桶。

但是,当我检查第二个存储桶时,对象减少了 40-50 个,但我无法弄清楚它们是什么(目录结构深度嵌套等(。

如何使用aws s3api list-objects获取两个存储桶的文件差异?

也许存储桶中有一些文件不是视频,我不知何故不知道。

您可以使用带有--dryrun选项的sync命令进行比较,而不是同步。

aws s3 sync s3://bucket s3://bucket2 --dryrun

当然,您也可以使用它来比较本地目录和存储桶。

aws s3 sync . s3://bucket2 --dryrun

使用仅显示文件名:

aws s3 ls s3://bucket-1 --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ t]*//' | sort > bucket_1_files
aws s3 ls s3://bucket-2 --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ t]*//' | sort > bucket_2_files
diff bucket_1_files bucket_2_files

灵感来自@George评论

您可以使用它来提取路径列表:

aws s3 sync s3://<main-bucket> s3://<second-bucket> --dryrun | awk 'match($3,"^(s3://[^/]+/)(.*)",a) {print a[2]}'

或本地路径

aws s3 sync <local-path> s3://darsak2.public --dryrun | awk 'match($3,"^(./)?(.*)",a) {print a[2]}'

最新更新