【问题标题】:AWS S3 sync --delete, removed new files in localAWS S3 同步 --delete,在本地删除新文件
【发布时间】:2023-04-02 13:20:01
【问题描述】:

aws s3 sync --delete 删除了一些新文件。

例如:

桶中有一个文件-S3://my-bucket/images/1.jpg

然后,我上传了一个文件到服务器:2.jpg

服务器中有2个文件:1.jpg2.jpg

开始运行同步 cronjob:

aws s3 sync s3://my-bucket/ ./ --delete
aws s3 sync  ./ s3://my-bucket/ --delete

我们为什么要添加--delete——我们要删除s3中的文件并同步到服务器。

我们会将文件上传到服务器并删除 s3 中的文件。

有什么办法可以解决吗?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-cli


    【解决方案1】:

    默认情况下,aws sync 命令 (see documentation) 不会删除文件。它只是将新文件或修改后的文件复制到目标位置。

    使用--delete 选项可删除目标中存在但源中不存在的文件。

    因此,如果您的源包含:1.jpg2.jpg,而目标包含 1.jpg2.jpg3.jpg,那么使用 --delete 选项将从目标中删除 3.jpg

    我看到您正在双向运行sync 命令。您的第一个命令(将 S3 同步到本地目录)将删除任何不在 S3 中的本地文件。

    如果您的目标是将所有本地文件复制到 S3 并将所有 S3 文件复制到本地目录,而不删除任何文件,那么不要使用 --delete 选项

    【讨论】:

    • 嗨,我的目标是删除 s3 存储桶中的一些旧文件,然后我使用 --delete 运行该命令,我希望它也删除我的本地文件。然后我可以使用 aws s3 sync 命令将一些新文件从本地上传到 s3。有可能吗?
    • 是的,你可以这样做。请注意,--delete 将删除目标中不在源中的文件。因此,只能从“主”位置使用它。它不会从“本地”(源)位置删除文件。只需按照运行命令的顺序进行调整即可获得所需的行为。
    • 我有点期待同步命令的默认行为来执行此操作,因为这会使它与 cp 命令不同。但是测试。
    【解决方案2】:

    --delete 选项可从源中不存在的目标中删除文件或对象。

    【讨论】:

      【解决方案3】:

      对于新的s3cmd,您可以使用选项--delete-removed 删除目标中不存在源的额外文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2021-05-11
        • 2017-10-04
        • 2021-07-19
        • 1970-01-01
        相关资源
        最近更新 更多