#bash #amazon-web-services #amazon-s3 #aws-cli
#bash #amazon-веб-сервисы #amazon-s3 #aws-cli
Вопрос:
Я пытаюсь загрузить файлы в S3, чтобы заставить работать некоторые перенаправления. К сожалению, я замечаю некоторые аномалии, когда имена файлов содержат пробелы.
Мой сценарий bash очень прост:
#!/usr/bin/env bash
declare -A redirects
redirects["foo/bar/index.html"]="/foo/"
redirects["foo/bar/test.pdf"]="/foo/test.pdf"
redirects["assets/docs/NEW-TEST WELCOME TO MYTEST.pdf"]="/"
for i in "${!redirects[@]}"
do
echo "Executing command: aws s3api put-object --bucket $BUCKET_NAME --key" '"'${i}'"' "--website-redirect-location" "${redirects[$i]}"
aws s3api put-object --bucket $BUCKET_NAME --key '"'${i}'"' --website-redirect-location "${redirects[$i]}"
done
Из выходных данных я вижу:
Executing command: aws s3api put-object --bucket myamazingbucket --key "assets/docs/NEW-TEST WELCOME TO MYTEST.pdf" --website-redirect-location /
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
Unknown options: TO, MYTEST.pdf", WELCOME
У вас есть предложения о том, как создать эти put-объекты на S3?
Ответ №1:
Указывая '"'${i}'"'
, вы вводите буквальную кавычку в начале и конце строки, что внутренне приводит к команде aws, например:
aws s3api put-object --bucket BUCKET_NAME --key '"assets/docs/NEW-TEST' WELCOME TO 'MYTEST.pdf"' --website-redirect-location /
Вместо этого вы должны правильно заключить свою строку в кавычки, изменив свою aws
командную строку на:
aws s3api put-object --bucket $BUCKET_NAME --key "${i}" --website-redirect-location "${redirects[$i]}"
… что внутренне приводит к команде aws, как показано ниже.
aws s3api put-object --bucket BUCKET_NAME --key 'assets/docs/NEW-TEST WELCOME TO MYTEST.pdf' --website-redirect-location /
Кстати. ваша echo
команда ведет себя по-другому, потому что вы передаете командную строку echo
в кавычках в виде строки в кавычках.
Комментарии:
1. Отлично. Спасибо 🙂