s3api put-объект с пробелами, включенными в имя файла

#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. Отлично. Спасибо 🙂