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

时间:2017-08-04 18:40:34

标签: shell amazon-web-services unix amazon-s3 aws-sdk

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

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

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

也许存储桶中的文件不是视频,我不知道这些文件。

3 个答案:

答案 0 :(得分:5)

使用Display only filenames

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

答案 1 :(得分:1)

您可以将sync命令和--dryrun选项一起使用来进行比较而不是进行同步。

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

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

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

答案 2 :(得分:0)

灵感来自@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]}'