首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在aws中移动/获取基于日期的文件子集的最便宜方式

在aws中移动/获取基于日期的文件子集的最便宜方式
EN

Stack Overflow用户
提问于 2020-07-04 15:21:26
回答 1查看 542关注 0票数 1

我的主要问题是:

如何才能在不引起客户端api调用的情况下,基于日期范围移动文件呢?

背景:

我想将AWS S3桶中的一个文件子集下载到一个linux服务器上,但是在一个文件夹中有数百万个文件,除了序列号之外没有任何区别;我需要一个基于创建日期的文件子集。(实际上,文件内部有一个事件时间戳,所以我希望首先在创建日期之前减少批量)。

坦率地说,我不知道我要付出什么代价,每次我在那个数据集上做ls,例如用于测试。

现在我正在考虑:

代码语言:javascript
运行
复制
aws s3api list-objects --bucket "${S3_BUCKET}" --prefix "${path_from}" --query "Contents[?LastModified>='${low_extract_date}'].{Key: Key}"

但如果我正确理解的话,那就是客户端。因此,我想把相关的文件移动到一个不同的文件夹,首先,根据创建日期。

然后只需在该集合上运行aws S3 ls即可。

这有可能吗?

因为在这种情况下,我要么:

  1. 将文件移动到另一个文件夹,同时限制在我感兴趣的日期范围内(2-5%)
  2. 列出所有这些文件(据我所知,这就是创建成本的地方?)然后,解压缩它们(并将它们移动到archive)
  3. remove子集文件夹

)。

或者:

将存储桶同步到一个新的bucket

  • delete --我不需要从该桶(比日期X更早)的所有文件--

  • 在剩余的集合

上运行ls

或者:其他方式?

以及:这比使用查询列出文件便宜吗?

谢谢!

PS因此澄清:我希望做一个服务器端的操作,以减少最初的设置,然后列出结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 15:31:33

我相信解决这个问题的一个好办法是:

如果您的实例位于VPC中,则为

  • 创建S3的VPC端点,以允许直接私有连接到
  • S3,而不是穿过internet
  • 移动所需的对象密钥,以包括前缀(最好是Y/m/d),例如prefix/randomfile.txt可能成为2020/07/04/randomfile.txt。如果您计划删除其余的文件,那么将其移动到一个新的桶中,而不是在同一个桶中。

在CLI中,可以使用当前语法移动文件。

代码语言:javascript
运行
复制
aws s3 mv s3://bucketname/prefix/randomfile.txt s3://bucketname/2020/07/04/randomfile.txt

要复制特定前缀的文件,可以在CLI上运行以下命令

代码语言:javascript
运行
复制
aws s3 cp s3://bucketname/2020/07 .

要在特定日期获取文件,可以运行以下命令

代码语言:javascript
运行
复制
aws s3api list-objects-v2 --bucket bucketname --query 'Contents[?contains(LastModified, `$DATE`)]'

运行此操作的结果需要通过CLI运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62730916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档