Atualizar
Como apontado por alberge (+1), hoje em dia a excelente AWS Command Line Interface fornece a abordagem mais versátil para interagir com (quase) todas as coisas da AWS - entretanto, ela cobre a maioria das APIs de serviços e também apresenta comandos S3 de nível superior para lidar com o seu caso de uso especificamente, consulte a referência AWS CLI para S3 :
- sync - Sincroniza diretórios e prefixos S3. O seu uso caso é coberto por Exemplo 2 (mais fino granulado com o uso
--exclude
, --include
e de manuseamento de prefixo etc também está disponível):
O comando de sincronização a seguir sincroniza objetos em um prefixo e intervalo especificados com objetos em outro prefixo e intervalo especificados, copiando objetos s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Para completar, mencionarei que os comandos S3 de nível inferior também estão disponíveis por meio do subcomando s3api , o que permitiria traduzir diretamente qualquer solução baseada em SDK para o AWS CLI antes de adotar sua funcionalidade de nível superior eventualmente.
Resposta Inicial
A movimentação de arquivos entre depósitos S3 pode ser realizada por meio da API PUT Object - Copy (seguida por DELETE Object ):
Esta implementação da operação PUT cria uma cópia de um objeto que já está armazenado no Amazon S3. Uma operação de cópia PUT é o mesmo que executar um GET e, em seguida, um PUT. Adicionar o cabeçalho da solicitação, x-amz-copy-source, faz com que a operação PUT copie o objeto de origem para o intervalo de destino. Fonte
Existem respectivos exemplos para todos os SDKs da AWS existentes disponíveis, consulte Copiando objetos em uma única operação . Naturalmente, uma solução baseada em script seria a primeira escolha óbvia aqui, portanto, Copiar um objeto usando o SDK da AWS para Ruby pode ser um bom ponto de partida; se você preferir Python, o mesmo pode ser feito via boto também, é claro, consulte o método copy_key()
na documentação da API S3 do boto .
PUT Object
apenas copia arquivos, então você precisará excluir explicitamente um arquivo via DELETE Object
still após uma operação de cópia bem-sucedida, mas isso será apenas mais algumas linhas uma vez que o script geral que trata do intervalo e dos nomes de arquivo esteja pronto (há respectivos exemplos também , consulte, por exemplo, Exclusão de um objeto por solicitação ).