Рішення
aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]
Пояснення
Для S3 немає функцій перейменування ковша, тому що в S3 технічно немає папок, тому нам доводиться обробляти кожен файл у відрі.
Код, наведений вище: 1. створить нове відро, 2. скопіює файли та 3. видалить старе. Це воно.
Якщо у вашому відрі багато файлів і ви турбуєтесь про витрати, тоді читайте далі. За лаштунками відбувається те, що всі файли у відрі спочатку копіюються, а потім видаляються. Це має коштувати незначної суми, якщо у вас є кілька тисяч файлів. Інакше перевірте цю відповідь, щоб побачити, як це вплине на вас.
Приклад
У наступному прикладі ми створюємо та заповнюємо старе відро, а потім синхронізуємо файли з новим. Перевірте вихід команд, щоб побачити, що робить AWS.
> # bucket suffix so we keep it unique
> suffix="ieXiy2" # used `pwgen -1 -6` to get this
>
> # populate old bucket
> echo "asdf" > asdf.txt
> echo "yxcv" > yxcv.txt
> aws s3 mb s3://old-bucket-$suffix
make_bucket: old-bucket-ieXiy2
> aws s3 cp asdf.txt s3://old-bucket-$suffix/asdf.txt
upload: ./asdf.txt to s3://old-bucket-ieXiy2/asdf.txt
> aws s3 cp yxcv.txt s3://old-bucket-$suffix/yxcv.txt
upload: ./yxcv.txt to s3://old-bucket-ieXiy2/yxcv.txt
>
> # "rename" to new bucket
> aws s3 mb s3://new-bucket-$suffix
make_bucket: new-bucket-ieXiy2
> aws s3 sync s3://old-bucket-$suffix s3://new-bucket-$suffix
copy: s3://old-bucket-ieXiy2/yxcv.txt to s3://new-bucket-ieXiy2/yxcv.txt
copy: s3://old-bucket-ieXiy2/asdf.txt to s3://new-bucket-ieXiy2/asdf.txt
> aws s3 rb --force s3://old-bucket-$suffix
delete: s3://old-bucket-ieXiy2/asdf.txt
delete: s3://old-bucket-ieXiy2/yxcv.txt
remove_bucket: old-bucket-ieXiy2