Как загрузить, распаковать и перенести несколько файлов непосредственно в корзину s3? - PullRequest
0 голосов
/ 24 октября 2019

Моя проблема заключается в следующем: я хотел бы скачать набор данных, размещенный где-нибудь, используя его URL, распаковать его и загрузить файлы (например, изображения) в корзину s3. Примером набора данных может быть CIFAR-100: https://www.cs.toronto.edu/~kriz/cifar.html, а url набора данных будет https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz

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

curl "url/single_image.tar.gz" | tar xvz | aws s3 cp - s3://my_bucket/single_image.jpg

Но если сжатая папка содержит, например, несколько изображений, приведенная выше команда больше не работает, так как для нее требуется указать имя файла и расширение назначения.

Какое самое простое решение этой проблемы?

1 Ответ

0 голосов
/ 24 октября 2019

Используйте gnu tar с опцией --to-command, которая позволяет:

Извлекать файлы и передавать их содержимое на стандартный ввод команды. Когда используется эта опция, вместо создания указанных файлов tar вызывает команду и передает содержимое файлов на стандартный вывод.

Он даже поддерживает следующее:

Команда может получить информацию о файле, который она обрабатывает, из следующих переменных среды:

TAR_FILENAME Имяфайла.

Следующая команда должна делать то, что вы хотите:

curl https://xxxxx/test.tar | tar -xz --to-command='aws s3 cp - s3://bucket/$TAR_FILENAME'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...