【问题标题】:s3api put-object with spaces included in the name of the files3api put-object,文件名中包含空格
【发布时间】:2021-01-09 21:10:54
【问题描述】:

我正在尝试将文件上传到 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

您对如何在 S3 上制作这些放置对象有什么建议吗?

【问题讨论】:

    标签: bash amazon-web-services amazon-s3 aws-cli


    【解决方案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

    【讨论】:

    • 太棒了。谢谢你:)
    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多