Este é uma pergunta antiga, mas aconteceu de eu vir contra o mesmo requisito. Hoje há uma maneira bastante fácil de copiar todos os arquivos de um intervalo de versão para outro. Eu criei o seguinte script do PowerShell para fazer isso:
$sourceBucket = <source bucket>
$destinationBucket = <destination bucket>
$nextKeyMarker = $null
$nextVersionIdMarker = $null
do {
$objectVersions = Get-S3Version -BucketName $sourceBucket '
-KeyMarker $nextKeyMarker '
-VersionIdMarker $nextVersionIdMarker
$nextKeyMarker = $objectVersions.NextKeyMarker
$nextVersionIdMarker = $objectVersions.NextVersionIdMarker
$objectVersions.Versions | foreach {
Copy-S3Object -BucketName $sourceBucket '
-DestinationBucket $destinationBucket '
-Key $_.Key '
-DestinationKey $_.Key '
-VersionId $_.VersionId '
-CannedACLName bucket-owner-full-control
}
} while ($objectVersions.IsTruncated -eq "True")
- Isso deve funcionar, não importa o número de objetos no bloco, pois ele copia versões de objetos em volumes de 1000.
- O parâmetro CannedACLName é usado para transferir a propriedade dos objetos para a nova conta da AWS em que o depósito de destino pertence. Sem isso, o proprietário dos objetos copiados ainda será a conta do depósito de origem, tornando todos os objetos copiados inacessíveis pela nova conta do proprietário. Se você estiver copiando objetos entre depósitos na mesma conta, não será necessário especificar isso.