密钥不存在,但仅适用于单个文件夹

时间:2017-02-06 19:55:27

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

我遇到了S3存储桶中的文件夹问题,但我无法弄清楚...我使用以下bash脚本来保留最近的10个版本我们的应用程序在S3桶中。每次我们启动构建时,它只是复制构建(1 - > 0,2 - > 1等)并删除文件夹9中的最新版本。它一直运行良好,直到我到达文件夹9,然后即使文件夹9确实存在,我也收到错误An error occurred (404) when calling the HeadObject operation: Key "iv/9/" does not exist

declare -i i=0

for j in `seq 1 9`
do
    echo "Copying build # $j to build # $i"
    aws s3 mv s3://xvaws-builds/iv/$j/ s3://xvaws-builds/iv/$i/
    let i++
done

我想也许文件夹9被命名为一些傻瓜,有一些空白等等,但是在跑完之后s3 ls s3:// myaws-builds / iv /'一切都很好......

循环的结果如下:

Copying build # 1 to build # 0
move: s3://myaws-builds/iv/1/ to s3://myaws-builds/iv/0/
Copying build # 2 to build # 1
move: s3://myaws-builds/iv/2/ to s3://myaws-builds/iv/1/
Copying build # 3 to build # 2
move: s3://myaws-builds/iv/3/ to s3://myaws-builds/iv/2/
Copying build # 4 to build # 3
move: s3://myaws-builds/iv/4/ to s3://myaws-builds/iv/3/
Copying build # 5 to build # 4
move: s3://myaws-builds/iv/5/ to s3://myaws-builds/iv/4/
Copying build # 6 to build # 5
move: s3://myaws-builds/iv/6/ to s3://myaws-builds/iv/5/
Copying build # 7 to build # 6
move: s3://myaws-builds/iv/7/ to s3://myaws-builds/iv/6/
Copying build # 8 to build # 7
move: s3://myaws-builds/iv/8/ to s3://myaws-builds/iv/7/
Copying build # 9 to build # 8
An error occurred (404) when calling the HeadObject operation: Key "iv/9/" does not exist

该目录上的ls结果返回:

PRE 0/ PRE 1/ PRE 2/ PRE 3/ PRE 4/ PRE 5/ PRE 6/ PRE 7/ PRE 8/ PRE 9/ 2017-02-06 10:06:51 0

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

S3实际上不支持文件夹。除非您通过S3 Web控制台创建了名为iv/9/的伪文件夹,否则该“文件夹”将不会存在,您将收到此错误消息。我建议您检查这些命令中的任何一个是否实际上正在执行您认为他们正在执行的操作。

例如,如果您使用密钥iv/9/filename.txt在S3中创建了一个对象,而使用密钥iv/9/filename2.txt创建了另一个对象,那么您的S3中仍然没有名为iv/9/的文件夹桶。如果您对密钥前缀iv/9/

进行过滤,则可以找到两个对象