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