【问题标题】:rclone - How do I list which directory has the latest files in AWS S3 bucket?rclone - 如何列出 AWS S3 存储桶中包含最新文件的目录?
【发布时间】:2020-09-12 02:29:51
【问题描述】:

我目前正在使用 rclone 访问 AWS S3 数据,由于我不使用任何一个,所以我不是专家。

我正在访问公共存储桶unidata-nexrad-level2-chunks,我正在查看 1000 个文件夹。要查看这些,我使用 Windows 命令提示符并输入:

rclone lsf chunks:unidata-nexrad-level2-chunks/KEWX

只有一个文件夹在任何时候都写入了实时数据,这就是我需要找到的那个。我如何确定哪一个是我需要的?我可以检查一下哪个文件夹有最新的数据。但是我该怎么做呢?

我的命令的输出如下所示:

1/
10/
11/
12/
13/
14/
15/
16/
17/
18/
19/
2/
20/
21/
22/
23/
... ... ... (to 1000)

如何查找最新数据的写入位置?由于一次只有一个文件夹,我希望它会很简单。

编辑:我意识到我需要一种方法来列出最新文件(连同它的文件夹#),而不是列出所有 999 个目录中可能的每个文件和时间戳。我正在开始一项赏金,并且允许我在不费力地完成所有任务的情况下做到这一点的正确答案将获得赏金。如果列出所有 999 个文件夹中的所有内容需要 20 分钟,那是没有用的,因为到那时下一个文件夹将处于活动状态。

【问题讨论】:

  • 您能解释一下如何定义“正在写入最新数据”的文件夹吗?它每天/每小时的变化是未知的?
  • 是的,每隔 5-9 分钟,传入的数据会选择一个新文件夹进行写入。

标签: amazon-web-services amazon-s3 rclone


【解决方案1】:

如果您想知道 特定 文件夹和 very latest 文件,您应该编写自己的脚本来检索 所有对象的列表,然后找出哪个是最新的以及它在哪个存储桶中。这是一个执行此操作的 Python 脚本:

import boto3

s3_resource = boto3.resource('s3')

objects = s3_resource.Bucket('unidata-nexrad-level2-chunks').objects.filter(Prefix='KEWX/')

date_key_list = [(object.last_modified, object.key) for object in objects]

print(len(date_key_list)) # How many objects?

date_key_list.sort(reverse=True)

print(date_key_list[0][1])

输出:

43727
KEWX/125/20200912-071306-065-I

遍历这 43,700 个对象需要一段时间!

【讨论】:

  • 嗨约翰,我接受了你的回答,因为它很有帮助。但是,当您说列出对象需要一段时间时,您是正确的。我正试图找出一种快速的方法来做到这一点,因为这是实时天气雷达数据。这些数据是 AWS/NOAA 合作伙伴关系的一部分,并且必须有一种方法可以找出哪个目录是“工作”目录!我无法看到其他人在不知不觉中使用这些数据。
  • 看起来像 RadarServer 的东西可能会帮助您识别要使用的文件:Using Python to Access NCEI Archived NEXRAD Level 2 Data
  • 感谢您的帮助,但该数据用于访问已完成的卷扫描。经过长时间的搜索,我仍然没有弄清楚如何找出当前要使用的文件夹。似乎这是一条非常重要的信息,没有任何文档,非常混乱。
  • 难道不能使用 --max-age (rclone.org/filtering/…) 和 --dry-run / -v 参数来实现你想要的吗?如果您将 --max-age 设置为允许文件或 1D 的更新间隔。如果你想让事情变得准确,你可以使用这种技术来过滤大部分数据/节省过程中的时间(然后使用上面的(接受的)脚本来获取确切的目录。这样可以避免你希望制作这么多 HEAD请求
猜你喜欢
  • 2022-01-23
  • 2017-10-17
  • 1970-01-01
  • 2022-01-07
  • 2019-12-02
  • 2020-01-24
  • 2016-10-29
  • 2019-05-10
  • 2020-11-24
相关资源
最近更新 更多