Обновить
Как указывает alberge (+1), в настоящее время превосходный интерфейс командной строки AWS обеспечивает наиболее универсальный подход для взаимодействия (почти) со всем, что связано с AWS - в то же время он охватывает API большинства служб, а также содержит команды S3 более высокого уровня для работы с вашими В частности, см. справочник по интерфейсу командной строки AWS для S3 :
- sync - синхронизирует каталоги и префиксы S3. Использование случай охватываются примером 2 (более мелкозернистое использование с
--exclude, --includeи обработкой префикса и т.д. также доступен):
Следующая команда синхронизации синхронизирует объекты с указанным префиксом и сегментом с объектами с другим указанным префиксом и сегментом путем копирования объектов s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Для полноты я упомяну, что команды S3 более низкого уровня также по-прежнему доступны через подкоманду s3api , которая позволит напрямую транслировать любое решение на основе SDK в интерфейс командной строки AWS перед тем, как в конечном итоге принять его функциональность более высокого уровня.
Первоначальный ответ
Перемещение файлов между бакетами S3 может быть достигнуто с помощью API PUT Object - Copy (за которым следует DELETE Object ):
Эта реализация операции PUT создает копию объекта, который уже хранится в Amazon S3. Операция копирования PUT аналогична выполнению GET, а затем PUT. Добавление заголовка запроса x-amz-copy-source заставляет операцию PUT копировать исходный объект в целевую корзину. Источник
Существуют соответствующие образцы для всех существующих SDK AWS, см. Копирование объектов за одну операцию . Естественно, решение на основе сценариев будет здесь очевидным первым выбором, поэтому копирование объекта с помощью AWS SDK для Ruby может быть хорошей отправной точкой; Если вы предпочитаете Python, то же самое можно сделать и с помощью boto, конечно, см. метод copy_key()в документации boto S3 API .
PUT Objectкопирует только файлы, поэтому вам нужно будет явно удалить файл через DELETE Objectвсе еще после успешной операции копирования, но это будет всего лишь несколько строк после того, как общий сценарий, обрабатывающий ведро и имена файлов, будет на месте (есть также соответствующие примеры , см., например, Удаление одного объекта по запросу ).