AWS S3在两个存储桶之间复制资产

时间:2019-05-29 12:33:12

标签: amazon-s3 copy

使用命令行界面,我可以在两个存储桶之间复制文件。

$ aws s3 sync s3://mybucket-src s3://mybucket-target --exclude *.tmp

这将从一个源存储桶复制到另一目标存储桶。但是我想将文件类型(图像,文档,视频)复制到目标存储桶中的相应文件夹。

  1. 图像进入source_files / images
  2. 文档进入source_files / pdf
  3. 视频进入源文件/视频

一旦新文件击中了源存储桶,也应将它们复制到目标存储桶中的相应文件夹中。

2 个答案:

答案 0 :(得分:0)

您的问题有两个主题:

  • 根据对象的类型将其移动到不同的位置
  • 对象一出现就移动

通过创建 Amazon S3事件,可以在创建对象后立即执行操作。该事件可以触发AWS Lambda函数,向Amazon SNS主题发送消息或将消息放入Amazon SQS队列。

对于您的用例,您可以使用 AWS Lambda函数。该功能应:

  • 从提供的bucket name记录中检索对象的Keyevent
  • 通过HeadObject()检索有关对象的元数据
  • 发出CopyObject()命令以根据元数据将对象复制到所需位置

有关创建S3对象时触发Lambda函数的示例,请参见:Tutorial: Using AWS Lambda with Amazon S3 - AWS Lambda

答案 1 :(得分:0)

如果您使用的是Windows Powershell:

  aws s3 ls  s3://bucket-source | ForEach-Object -Process {[System.IO.Path]::GetExtension($_).Split(".")[1]} | ForEach-Object -Process {aws s3 sync s3://bucket-source s3://bucket-destination/$_/ --exclude "*" --include  "*.$_" }

说明:

  1. 获取源存储桶中的文件列表

    aws s3 ls s3:// bucket-source

  2. 找到他们的扩展名

    ForEach-Object -Process {[System.IO.Path] :: GetExtension($ _)。Split(“。”)[1]}

  3. 复制到目标存储桶。它为每个扩展名创建文件夹,并将该类型的文件复制到其中:

    ForEach-Object -Process {aws s3 sync s3:// bucket-source s3:// bucket-destination / $ /-排除“ *” --include“ *。$