密钥不存在,但仅针对单个文件夹

Key does not exist, but only for a single folder

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

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 被命名为一些愚蠢的东西,有一些空白等等,但是在 运行 'aws 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 结果 returns:

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

有什么想法吗?

S3 实际上不支持文件夹。除非您通过 S3 网络控制台或其他方式创建了名为 iv/9/ 的 pseudo-folder,否则 "folder" 不会实际存在,您将收到此错误消息。我建议您检查这些命令中的任何一个是否真的按照您认为的那样进行。

例如,如果您在 S3 中使用键 iv/9/filename.txt 创建了一个对象,并使用键 iv/9/filename2.txt 创建了另一个对象,那么您仍然没有名为 iv/9/ 的文件夹您的 S3 存储桶。你有两个对象,如果你过滤键前缀 iv/9/

就可以找到它们