为aws s3 cp/mv
命令提供一个方便的函数--no-overwrite
会很好,它会在将文件放入 s3 存储桶之前检查目标目标是否不存在。
当然,AWS API(afaik...)无法保证这种逻辑,并且容易受到竞争条件等的影响。但这有助于防止无意的错误!
标记为功能请求。 如果我们在cp
或mv
中执行此操作,棘手的部分是 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
最有用的评论
根据社区反馈,我们决定将功能请求返回给 GitHub 问题。