Amazon S3 /两个存储桶之间的合并

时间:2015-08-11 06:59:26

标签: amazon-web-services amazon-s3

我有两个存储桶ab。存储区b包含a中80%的对象。

我想将a中剩余的20%对象复制到b,而不将对象下载到本地存储。

我看到了AWS Command Line Interface,但正如我所知,它将所有对象从a复制到b,但正如我所说 - 我希望它只复制那些文件存在于a但在b中不存在。

2 个答案:

答案 0 :(得分:4)

安装aws cli并使用访问凭据配置它

确保两个存储桶具有相同的目录结构

AWS S3 docs

  

以下sync命令会同步指定前缀和下的对象   通过复制将桶存储到另一个指定前缀和存储桶下的对象   s3对象。如果两者的大小,s3对象将需要复制   s3对象不同,源的最后修改时间比新的更新   目标的最后修改时间,或s3对象没有   存在于指定的存储区和前缀目标下。在这   例如,用户将存储桶mybucket2同步到存储桶mybucket。   bucket mybucket包含对象test.txt和test2.txt。该   bucket mybucket2不包含任何对象:

aws s3 sync s3://mybucket s3://mybucket2

答案 1 :(得分:0)

您可以使用AWS SDK编写一个php或其他支持的语言脚本,它将从两个存储桶中创建文件名列表,使用array_diff找出不常见的文件,然后将文件从Bucket A复制到内存然后将文件放在Bucket B中。

这是一个很好的起点:https://aws.amazon.com/sdk-for-php/

更深入地创建文件名(键)数组:[http://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingPHP.html][2]

一些用于检索密钥的代码

$objects = $s3->getIterator('ListObjects', array('Bucket' => $bucket));

foreach ($objects as $object) {
    echo $object['Key'] . "\n";
}

Here describes how to move keys from bucket to bucket

// Instantiate the client.
$s3 = S3Client::factory();

// Copy an object.
$s3->copyObject(array(
    'Bucket'     => $targetBucket,
    'Key'        => $targetKeyname,
    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
));

您将要从两个存储桶中提取密钥,然后执行array_diff以获取一组结果,然后您可以循环并传输这些密钥。希望这会有所帮助。