2016-06-24 3 views
1

У меня возникли проблемы с загрузкой нескольких файлов из веток AWS S3 на мою локальную машину.Скопируйте несколько файлов из ведра s3

У меня есть все имена файлов, которые я хочу загрузить, и я не хочу других. Как я могу это сделать ? Есть ли какой-либо цикл в aws-cli, я могу сделать некоторую итерацию?

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

+0

вы можете посмотреть 'aws s3api get-object', если вы можете фильтровать/запрашивать список ваших файлов. Если у вас есть список в файле, вы можете прочитать файл по строке и трубке с помощью' aws s3 cp s3: // yourbuyet/-' –

ответ

2

Существует сценарий bash, который может читать все имена файлов из файла filename.txt.

#!/bin/bash 
set -e 
while read line 
do 
    aws s3 cp s3://bucket-name/$line dest-path/ 
done <filename.txt 
+0

Спасибо, это определенно лучший способ сделать это. – DQI

+0

Да, это гораздо лучший способ сделать это по сравнению со всеми другими ответами, размещенными здесь. Спасибо, что поделились этим ответом. –

0

У меня проблема решена, может быть, немного глупо, но она работает.

Используя python, я пишу несколько строк команд загрузки AWS в одном файле .sh, а затем выполняю его на терминале.

+0

у вас есть много готовых к использованию sdk [здесь] (http://aws.amazon.com/code) на веб-сайте amazon. – Kruser

3

Возможно, вы захотите использовать «sync» вместо «cp». Ниже будет загрузить/синхронизировать только файлы с расширением «.txt» в локальной папке:

aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket . 
+0

Я хотел бы использовать приведенную выше команду для копирования всего 100 файлов (например). Есть ли умный способ/параметр, который можно использовать для этого? –

2

Также можно использовать опцию --recursive, как описано в documentation для cp команды. Он скопирует все объекты под заданным префиксом рекурсивно. Например .:

aws s3 cp s3://folder1/folder2/folder3 . --recursive

будет захватывать все файлы в folder1/folder2/folder3 и скопировать их в локальный каталог.

0

В соответствии с doc вы можете использовать фильтры include и exclude с s3 cp. Так что вы можете сделать что-то вроде этого:

aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*" 

Убедитесь, что вы получите заказ exclude и include фильтров прямо как это может изменить весь смысл.