Test.txtという名前のローカルファイルをs3バケットにコピーし、メタデータをファイルに追加しようとしています。
しかし、それは常にエラーを出力します:
argument --metadata-directive:無効な選択肢です。有効な選択肢は次のとおりです。 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
OS:macOS Sierraバージョン10.12.1
編集
言及する価値があるのは、-metadataフラグを指定せずにファイルをアップロードしても問題なく機能することです。
さて、上のバージョンのcliのヘルプをaws s3 cp help
で確認しました。上記のリンクにあるドキュメントのように、オプションとして--metadata
がリストされていないことがわかりました。
古いバージョンの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"}'
ドキュメント: AWS S3API DOCS
実際、メタデータオプションのサポートは 1.9.1 以降追加されています。
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"}'
インストールs3cmd
tools(free)そして次のように呼び出します:
s3cmd modify --add-header x-amz-meta-foo:bar s3://<bucket>/<object>
x-amz-meta-foo:bar
ヘッダーfoo
as keyおよびbar
as valueそのキーを取得します。