Desenvolvi um pouco de desenvolvimento para o S3 e não encontrei uma maneira simples de baixar um balde inteiro.
Se você deseja codificar em Java, é fácil usar o jets3t lib para criar uma lista de buckets e iterar sobre essa lista para fazer o download deles.
Primeiro, obtenha um conjunto de chaves privadas públicas no console de gerenciamento da AWS para poder criar um objeto S3service:
AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);
Em seguida, obtenha uma matriz de seus objetos de buckets:
S3Object[] objects = s3Service.listObjects(YourBucketNameString);
Por fim, itere sobre essa matriz para baixar os objetos, um de cada vez, com:
S3Object obj = s3Service.getObject(bucket, fileName);
file = obj.getDataInputStream();
Coloquei o código de conexão em um singleton threadsafe. A sintaxe de tentativa / captura necessária foi omitida por razões óbvias.
Se você preferir codificar em Python, use o Boto.
Depois de examinar o BucketExplorer, " Fazer o download do balde inteiro " pode fazer o que você deseja.
aws s3 sync
é o melhor. Mas ninguém apontou uma opção poderosa:dryrun
. Esta opção permite ver o que seria baixado / carregado de / para s3 quando você estiver usandosync
. Isso é realmente útil quando você não deseja substituir o conteúdo no seu local ou em um bucket s3. É assim que é usado:aws s3 sync <source> <destination> --dryrun
usei o tempo todo antes de enviar um novo conteúdo para um bucket para não fazer upload de alterações indesejadas.