Скопировать файл с s3 на локальный? - PullRequest
0 голосов
/ 10 июля 2020

У меня много файлов в корзине s3, так что есть ли какая-нибудь команда aws cli, которую я могу использовать для поиска самого последнего файла с префиксом имени в s3? и как мне скопировать этот файл из s3 в мою локальную папку? Могу ли я использовать для этого библиотеку Boto3 или python?

Ответы [ 3 ]

3 голосов
/ 10 июля 2020

Эта команда перечислит «последний» объект для данного префикса:

aws s3api list-objects --bucket MY-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text

Вы можете объединить его с командой копирования:

key=$(aws s3api list-objects --bucket MY-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text)
aws s3 cp s3://MY-BUCKET/$key .

Параметр --query очень мощно. См .: Учебное пособие по JMESPath

0 голосов
/ 11 июля 2020

Вот как это сделать в Python:

import boto3

s3_client = boto3.client('s3')

response = s3_client.list_objects_v2(Bucket='MY-BUCKET', Prefix='foo/')
objects = sorted(response['Contents'], key=lambda obj: obj['LastModified'])

## Latest object
latest_object = objects[-1]['Key']
filename = latest_object[latest_object.rfind('/')+1:] # Remove path

# Download it to current directory
s3_client.download_file('MY-BUCKET', latest_object, filename)

По сути, вы возвращаете ВСЕ объекты, а затем сортируете их по LastModified.

Обратите внимание, что list_objects_v2() команда возвращает не более 1000 объектов. Если в ведре больше, вам нужно l oop или использовать пагинатор. См .: Пагинаторы - документация Boto3

0 голосов
/ 10 июля 2020

Вы можете обратиться к этому ответу за самым последним файлом. получить последний измененный объект из S3 CLI . Чтобы префикс был в списке объектов, вы можете просто использовать

aws s3 ls $BUCKET --recursive | sort | grep <prefix>

Спасибо

Ashi sh

...