2016-10-29 2 views
0

Мне нужно скопировать файлы из многих подкаталогов в ведро S3 на мой локальный компьютер. Имя файла автоматически генерируется и будет трудно получить без предварительного использования ls, но я знаю, что целевой файл всегда является вторым файлом в подпапке по порядку создания даты.Скопируйте файлы из ведра S3 на локальный компьютер, используя индекс файла

Есть ли способ ссылаться на файл в файле подпапки s3 bucket по индексу?

Я представляю себе это с aws cli, хотя я открыт для других предложений.

+0

Не могли бы вы обновить свой вопрос с помощью типовой структуры каталогов, выделив файлы, которые вы хотите скачать? –

ответ

1

Я не знаю ни одного способа в S3, чтобы перечислить второй самый старый объект без перечисления всех объектов в заданном префиксе, а затем явно отсортировать этот список по дате. Если вам нужно сделать это, то вот несколько идей:

  1. если объекты только когда-либо добавлены (не удалены), то вы могли бы, возможно, использовать ключ именование, когда объекты закачанные, что позволяет легко найти 2-й старейший объект, например 0001-xxx, 0002-xxx. Затем вы можете найти второй старейший объект, указав объекты с префиксом 0002.
  2. поддерживать независимый индекс объектов в базе данных RDBMS или KV, что позволяет легко находить ключ S3 второго старейшего объекта в любой части вашего S3. Возможно, DB поддерживается с помощью функции Lambda, которая называется, когда объекты помещаются или удаляются.
  3. использовать функцию Lambda, инициированную на объекте PUT, который перечисляет все объекты в соответствующей «папке» и записывает ключ второго старейшего объекта обратно в тип объекта индекса в той же папке (или как метаданные на известном индексный объект). Затем вы можете найти второй старейший, получив содержимое объекта индекса (или его метаданных).

Вариант №2 может быть лучшим, поскольку он прост, быстр и гибкий (что, если ваше приложение со временем изменится, вы обнаружите, что вам также необходимо знать 4-й старейший объект или второй новейший объект).

+0

Спасибо за ваши предложения. В настоящее время я пинаю себя за то, что не реализовал 1 или 2 ранее. – user3055034

1

Вы можете использовать этот метод, чтобы получить имя второго файла в заданном ковшом/пути:

aws s3api list-objects-v2 --bucket BUCKET-NAME --query 'Contents[1].Key' --output text 

Это также будет работать с BUCKET-NAME/PATH.

Однако вы упомянули, что у вас есть много подкаталогов, поэтому вам нужно будет знать имена всех этих подкаталогов, если вы хотите избежать полного перечисления в виде ведра.

Смежные вопросы