Aws-cli: 将 --no-overwrite 选项添加到 aws s3 cp/mv

创建于 2017-10-06  ·  43评论  ·  资料来源: aws/aws-cli

aws s3 cp/mv命令提供一个方便的函数--no-overwrite会很好,它会在将文件放入 s3 存储桶之前检查目标目标是否不存在。

当然,AWS API(afaik...)无法保证这种逻辑,并且容易受到竞争条件等的影响。但这有助于防止无意的错误!

feature-request s3

最有用的评论

根据社区反馈,我们决定将功能请求返回给 GitHub 问题。

所有43条评论

标记为功能请求。 如果我们在cpmv中执行此操作,棘手的部分是 CLI 可能必须在尝试上传文件之前查询 S3 以查看文件是否存在。 因此,将它添加到sync可能更有意义,因为它已经这样做了。

我也想在cp和/或mv中看到这一点。

我现在不为此使用sync的原因是,如果目标存储桶在目标目录下有很多现有文件, sync会出现严重的性能问题。

当您运行aws s3 cp --recursive newdir s3://bucket/parentdir/时,它只会访问它实际复制的每个文件。

当您运行aws s3 sync newdir s3://bucket/parentdir/时,它会访问它正在复制的文件,但还会遍历s3://bucket/parentdir中的整个文件列表(可能已经包含数千或数百万个文件)并获取每个现有文件的元数据.

在足够大的目标存储桶上, aws s3 cp --recursive可能需要几秒钟,而aws s3 sync可能需要几个小时来复制相同的数据。

显然修复sync会很好,但是如果向cp添加“检查文件是否已存在”查询是一个比修改sync代码更容易处理的问题让它快点,这样做可能更有意义。

我对这个功能也很感兴趣。 覆盖文件的可选交互式提示也很不错。

是的@sgrimm-sg,这是有道理的。 我也有兴趣看到可以实际处理这些条件的 CLI cp 命令。

作为aws s3 sync的一个选项,这将非常有用。 rsync具有此功能,可用作--ignore-existing 。 我的偏好是尝试使用与rsync相同的选项名称,因为我怀疑很多人已经熟悉rsync

早上好!

我们将在 GitHub 上关闭此问题,作为我们迁移到UserVoice以处理涉及 AWS CLI 的功能请求的一部分。

这将使我们能够更轻松地搜索和显示对您最关心的功能的支持,从而为您提供最重要的功能,而不会因错误报告而淡化对话。

作为 UserVoice 快速入门(如果还不熟悉):发布想法后,人们可以对想法进行投票,产品团队将直接响应最受欢迎的建议。

我们已从 GitHub 导入现有功能请求 - 在那里搜索此问题!

不用担心,为了后代,这个问题仍然存在于 GitHub 上。 由于它是原始帖子到 UserVoice 的纯文本导入,我们仍然会记住 GitHub 问题上已经存在的评论和讨论。

GitHub 仍将是报告错误的渠道。

再次,现在可以通过在以下位置搜索标题找到此问题: https ://aws.uservoice.com/forums/598381-aws-command-line-interface

-AWS 开发工具包和工具团队

此条目可在 UserVoice 上专门找到: https ://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168406-add-no-overwrite-option-to-aws-s3-

有关的:

根据社区反馈,我们决定将功能请求返回给 GitHub 问题。

@jamesls太好了! 你能回应手头的建议吗? --no-overwrite 将是一个很好的补充,它将避免使用脚本包装调用

对此问题 +1。 我建议使用 -n, --no-clobber 来匹配现有的 Linux cp 命令选项。

这个请求有没有实现? 尝试使用 Windows 批处理文件进行本地备份 > S3,这是最简单的方法,一个简单的不覆盖或类似标志。

有关此功能的任何更新?

有关此功能的任何更新? 谢谢

有关此功能的任何更新?

有关此功能的任何更新?

严重程度 3,+1

确实需要添加此功能,因为 S3 同步似乎不会上传每个文件。

有任何更新或解决方法吗?

有任何更新或解决方法吗?

我必须编写一个 python 脚本来将存储桶中的所有项目加载到一个数组(列表)中,然后从我要同步的目录中加载所有项目,然后比较数组并上传不在 S3 数组中的本地项目.

我必须编写一个 python 脚本来将存储桶中的所有项目加载到一个数组(列表)中,然后从我要同步的目录中加载所有项目,然后比较数组并上传不在 S3 数组中的本地项目.

@southpaw5271 - 愿意分享你的脚本并节省我一些时间吗? ; )

我必须编写一个 python 脚本来将存储桶中的所有项目加载到一个数组(列表)中,然后从我要同步的目录中加载所有项目,然后比较数组并上传不在 S3 数组中的本地项目.

@southpaw5271 - 愿意分享你的脚本并节省我一些时间吗? ; )

我好像没有了:(对不起!

该标志对于cp命令也很有价值,因为sync不允许在更改目标名称时复制文件。

aws s3 cp --no-overwrite ./somefile s3://bucket/othername

我们还需要从 s3 到本地的 --no-overwrite 选项。 我们被好心人的意外覆盖所烧毁,这将是为他们设置“护栏”的一种非常受欢迎的方式。 谢谢!

任何更新?

有关此功能的任何更新? 谢谢

+1

+1

我正在从旧系统迁移文件。 我有一个 python 脚本,它根据 db 列生成不同的路径(即每个组织现在在特定存储桶上都有自己的文件夹),所以我不能依赖同步命令。 如果 -skip-duplicate 或某种参数可用,我可以运行一个脚本来进行部分迁移。

+1

这是非常需要的。 为什么它不存在?

+1

+10

有关此功能的任何更新? 谢谢

也请为此功能投票!

+1

+1

+1

++1

对此有任何更新吗?

+1

我不敢相信它仍然不是一件事。 在 S3 上创建不可变存储几乎是不可能的 :(

我们已经开始将数据从 S3 存储桶复制到本地 linux 挂载,并且目标的大小比 S3 存储桶小约 40 GB。 想办法只复制缺失的部分。 似乎没有简单的方法可以做到这一点,而不是复制所有..

aws s3 sync可能完成类似操作的一个选项是--size-only布尔标志,仅当源对象和目标对象之间的大小不同时才会在目标中覆盖,

 --size-only (boolean) Makes the size of each key the only criteria used
       to decide whether to sync from source to destination.

我使用的命令,

aws s3 sync s3://<source bucket> s3://<destination bucket> --size-only 

_重要_:强烈建议先运行上面带有--dry-run布尔标志的命令,在实际运行之前查看该命令打算做什么,特别是如果它涉及您的生产系统。 这是出于谨慎考虑。

对我没有帮助,等待 DH 解决 #5456

此页面是否有帮助?
0 / 5 - 0 等级