awscli - получение определенного префикса объектов (или эквивалента в папке) для S3 - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть корзина, в которой есть несколько папок (я просто назову их папками для более легкого понимания. Я знаю, что папок на самом деле нет в S3), поэтому структура выглядит следующим образом

my_bucket
 |
 |- 2018-11-06-01
      |- file_name1
      |- file_name2
 |- 2018-11-06-02
      |- file_name1
      |- file_name2

Я пытаюсь получить только последние файлы, которые находятся в последней папке

Я могу получить строку имени папки, выполнив aws s3 ls my_bucket/ | tail -1, но она вернет PRE 2018-11-06-02/

Как получить имя папки, обработав строку, чтобы я мог выполнить aws s3 cp my_bucket/2018-11-06-02/ <some_path> --recursive?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Если вы просто хотите написать как однострочное решение, что-то вроде этого может помочь:

aws s3 ls <bucket> \
    | sort \
    | tail -n 1 \
    | awk '{print $2}' \
    | xargs -I {} aws s3 cp <bucket>/{} <local_folder> --recursive

однострочник можно прочитать как 2 части: - сначала он читает ls с сортировкой и получает 2-е значение вывода (извлекая часть PRE имени сегмента) - во-вторых, вы передаете результаты (имя «папки»), которые можно использовать для локального копирования полей из корзины.

0 голосов
/ 06 ноября 2018

Вы можете получить последнее измененное имя файла (включая полный путь) с помощью:

aws s3api list-objects-v2 --bucket my-bucket --query 'sort_by(Contents, &LastModified)[-1].Key' --output text

Затем вы можете извлечь путь до конечного / с помощью инструментов оболочки и отправить его в команду копирования.

Кроме того, закодируйте его на Python (или другом предпочтительном языке).

...