我的主要问题是:
如何才能在不引起客户端api调用的情况下,基于日期范围移动文件呢?
背景:
我想将AWS S3桶中的一个文件子集下载到一个linux服务器上,但是在一个文件夹中有数百万个文件,除了序列号之外没有任何区别;我需要一个基于创建日期的文件子集。(实际上,文件内部有一个事件时间戳,所以我希望首先在创建日期之前减少批量)。
坦率地说,我不知道我要付出什么代价,每次我在那个数据集上做ls,例如用于测试。
现在我正在考虑:
aws s3api list-objects --bucket "${S3_BUCKET}" --prefix "${path_from}" --query "Contents[?LastModified>='${low_extract_date}'].{Key: Key}"
但如果我正确理解的话,那就是客户端。因此,我想把相关的文件移动到一个不同的文件夹,首先,根据创建日期。
然后只需在该集合上运行aws S3 ls即可。
这有可能吗?
因为在这种情况下,我要么:
)。
或者:
将存储桶同步到一个新的bucket
上运行ls
或者:其他方式?
以及:这比使用查询列出文件便宜吗?
谢谢!
PS因此澄清:我希望做一个服务器端的操作,以减少最初的设置,然后列出结果。
发布于 2020-07-04 15:31:33
我相信解决这个问题的一个好办法是:
如果您的实例位于VPC中,则为
Y/m/d
),例如prefix/randomfile.txt
可能成为2020/07/04/randomfile.txt
。如果您计划删除其余的文件,那么将其移动到一个新的桶中,而不是在同一个桶中。在CLI中,可以使用当前语法移动文件。
aws s3 mv s3://bucketname/prefix/randomfile.txt s3://bucketname/2020/07/04/randomfile.txt
要复制特定前缀的文件,可以在CLI上运行以下命令
aws s3 cp s3://bucketname/2020/07 .
要在特定日期获取文件,可以运行以下命令
aws s3api list-objects-v2 --bucket bucketname --query 'Contents[?contains(LastModified, `$DATE`)]'
运行此操作的结果需要通过CLI运行。
https://stackoverflow.com/questions/62730916
复制相似问题