尝试将名为test.txt的本地文件复制到我的s3存储桶并将元数据添加到文件中。
但它总是打印错误:
参数--metadata-directive:选项无效,有效选项为:COPY | REPLACE
是否可以使用cp命令执行此操作,因为我理解应该可以使用的文档。 AWS CLI CP DOCS
这是我尝试过的命令:
aws s3 cp test.txt to s3://a-bucket/test.txt --metadata x-amz-meta-cms-id:34533452
aws s3 cp test.txt to s3://a-bucket/test.txt --metadata-directive COPY --metadata x-amz-meta-cms-id:34533452
aws s3 cp test.txt to s3://a-bucket/test.txt --metadata-directive COPY --metadata '{"x-amz-meta-cms-id":"34533452"}'
aws s3 cp test.txt to s3://a-bucket/test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
aws --version: aws-cli / 1.9.7 Python / 2.7.10 Darwin / 16.1.0 botocore / 1.3.7
操作系统: macOS Sierra版本10.12.1
修改
值得一提的是,上传没有--metadata标志的文件可以正常工作。
嗯,我已经用aws s3 cp help
检查了我的cli版本的帮助
事实证明它没有列出--metadata
作为选项,因为上面给定链接的文档确实如此。
如果runnig旧版本的aws cli
Use aws s3api put-object
如何将文件上传到存储桶并添加元数据:
aws s3api put-object --bucket a-bucket --key test.txt --body test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
答案 0 :(得分:12)
aws s3
在cp,mv和sync中添加了对自定义元数据的支持。
所以将你的aws cli升级到这个版本(甚至更新到最新版本) - 并且metadata
值需要是一个地图所以
aws s3 cp test.txt s3://a-bucket/test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}'
答案 1 :(得分:1)
安装s3cmd工具(免费)并调用 s3cmd modify --add-header x-amz-meta-foo:bar s3:/// modify:' s3:///'
foo - 键 bar - value
答案 2 :(得分:-1)
元数据指令“COPY”选项存在错误。
aws s3api copy-object --bucket testkartik --copy-source testkartik/costs.csv --key costs.csv --metadata-directive "COPY" --metadata "SomeKey=SomeValue"
以下是使用JQ解决方法了解cli命令的三个步骤。
阅读现有元数据。
aws s3api head-object --bucket <bucket> --key <key> | jq '.Metadata' | jq --compact-output '. +{"new":"metadata", "another" : "metadata"}'
添加新元数据。
aws s3api copy-object --bucket <bucket-name> --copy-source <bucket/key> --key <key> --metadata-directive "REPLACE" --metadata $(READ-THE-EXISTING-From-Step-2)
一次完成命令。
aws s3api copy-object --bucket <bucket-name> --copy-source <bucket/key> --key <key> --metadata-directive "REPLACE" --metadata $(aws s3api head-object --bucket <bucket> --key <key> | jq '.Metadata' | jq --compact-output '. +{"new":"metadata", "another" : "metadata"}')