存储桶之间的 AWS S3 同步覆盖较新的目标文件

Posted

技术标签:

【中文标题】存储桶之间的 AWS S3 同步覆盖较新的目标文件【英文标题】:AWS S3 sync between buckets overwriting newer destination files 【发布时间】:2017-07-12 09:43:17 【问题描述】:

我们有两个 s3 存储桶,并且我们有一个同步 cron 作业应该将存储桶 1 的更改复制到存储桶 2。

aws s3 sync s3://bucket1/images/ s3://bucket2/images/

将新图像添加到存储桶 1 时,它会正确复制到存储桶 2。

但是,如果我们将该图像的新版本上传到存储桶 2,当同步作业下一次运行时,它实际上会将旧版本从存储桶 1 复制到存储桶 2,替换我们刚刚放在那里的新版本。

这是迁移过程的一部分,及时将图片上传到的唯一位置将是 bucket2,但目前有时它们可​​能会上传到其中一个,我们只希望将来自 bucket1 的更改复制上去到bucket2,而不是相反。

为什么 aws 同步作业似乎认为 bucket1 上的文件已更改?是不是不知道bucket2里面的文件比较新,就不管了?

【问题讨论】:

【参考方案1】:

AWS Command-Line Interface (CLI)aws s3 sync 命令将内容从源位置复制到目标位置。它只复制自上次同步以来添加或更改的文件。

它被设计为单向同步,而不是双向同步。您的文件正在被覆盖,因为源中的文件在目标中不存在。这是正确的行为

调整这些控件的范围有限,例如(来自sync command documentation):

--exact-timestamps (boolean) 当从 S3 同步到本地时,只有当时间戳完全匹配时,相同大小的项目才会被忽略。默认行为是忽略相同大小的项目,除非本地版本比 S3 版本新

但是,似乎没有一个选项可以仅仅因为存在同名文件或偏好保留较新文件的文件而停止覆盖文件。

如果您想要使用更具体的规则进行双向同步,则需要自己编写代码。

【讨论】:

以上是关于存储桶之间的 AWS S3 同步覆盖较新的目标文件的主要内容,如果未能解决你的问题,请参考以下文章

text [与S3存储桶同步文件夹] #aws

我们可以使用 boto3 Python 在 aws s3 存储桶之间递归复制文件和文件夹吗?

AWS S3在两个存储桶之间复制文件和文件夹

将 AWS S3 存储桶同步到 EC2 服务器

当唯一的区别是标签时,如何在两个s3桶之间同步对象

使用 boto3 在两个 AWS S3 存储桶之间移动文件