rclone — Как указать, в каком каталоге находятся последние файлы в корзине AWS S3?

В настоящее время я использую 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 минут, это бесполезно, так как следующая папка к этому времени уже будет активна.


person David    schedule 12.09.2020    source источник
comment
Можете ли вы объяснить, как вы определяете папку, в которую записываются последние данные? Его меняют каждый день/час, что неизвестно?   -  person Marcin    schedule 10.07.2021
comment
Да, каждые 5-9 минут входящие данные выбирают новую папку для записи.   -  person David    schedule 18.07.2021


Ответы (1)


Если вы хотите узнать конкретную папку с самым последним файлом, вам следует написать собственный скрипт, который извлекает список ВСЕХ объектов, а затем выясняет, какой из них является последним и в каком сегменте он находится. Вот скрипт 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 объектов, требуется время!

person John Rotenstein    schedule 12.09.2020
comment
Привет, Джон, я принял твой ответ, потому что он был очень полезен. Однако вы правы, когда говорите, что для перечисления объектов требуется время. Я пытаюсь найти быстрый способ сделать это, так как это данные радара погоды в реальном времени. Эти данные являются частью партнерства AWS/NOAA, и каким-то образом должен быть способ узнать, какой каталог является рабочим! Я не могу видеть, как другие люди используют данные, не зная об этом. - person David; 12.09.2020
comment
Похоже, что что-то под названием RadarServer может помочь вам определить файлы для использования: Данные уровня 2 - person John Rotenstein; 13.09.2020
comment
Я ценю помощь, однако эти данные предназначены для доступа к завершенным сканированиям томов. Я до сих пор не понял, как узнать, какая папка в настоящее время используется после долгих поисков. Кажется, это очень важная часть информации, по которой нет документации, что очень сбивает с толку. - person David; 14.09.2020
comment
Разве нельзя использовать --max-age (rclone.org/filtering/) и параметры --dry-run / -v для достижения желаемого? если вы установите для параметра --max-age значение интервала обновления файла или 1D. если вы хотите, чтобы все было точно, вы можете использовать эту технику, чтобы отфильтровать большую часть данных / сэкономить время в процессе (а затем использовать приведенный выше (принятый) скрипт, чтобы получить точный каталог. Надеюсь, это позволит вам избежать так много HEAD Запросы - person jcuypers; 14.07.2021