2016-11-16 2 views
3

Пытается скопировать локальный файл с именем test.txt в мой ведро s3 и добавить метаданные в файл.AWS S3 CLI CP файл и добавить метаданные

Но он всегда печатает сообщение об ошибке:

аргумент --metadata-директива: Invalid выбор, допустимые варианты: 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-кли/1.9.7 Python/2.7.10 Darwin/16.1.0 botocore/1,3. 7

OS: MacOS Sierra версия 10.12.1

Редактировать

Стоит отметить, что загрузка файла без флага -metadata выполняется нормально.

Хм, я проверил помощь для моей версии кли с 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"}' 

Docs: AWS S3API DOCS

ответ

4

Действительно поддержка опции метаданных была добавлена ​​с 1.9.10

aws s3 Added support for custom metadata in cp, mv, and sync.

так обновляющийся ваш AWS Cli этой версии (или еще лучше к последнему) - и значению metadata должно быть картой так

aws s3 cp test.txt s3://a-bucket/test.txt --metadata '{"x-amz-meta-cms-id":"34533452"}' 
+0

Спасибо спариваться! По какой-то причине я прочитал 1.9 как более высокую версию, которая 1.11 –

+0

Для меня команда json должна была быть внутри '' aws s3 cp test.txt s3: //a-bucket/test.txt --metadata '{"x -amz-meta-cms-id ":" 34533452 "} ' –

+0

hum ... ok будет редактировать, я не повторил честно - думал, что это сработало без цитаты. отредактирует, так что он будет работать как ответ –

-1

Существует ошибка с опцией директивы метаданных «COPY».

aws s3api copy-object --bucket testkartik --copy-source testkartik/costs.csv --key costs.csv --metadata-directive "COPY" --metadata "SomeKey=SomeValue"

enter image description here

Ниже приведены три шага, чтобы понять Cli команду с JQ обходной путь.

  1. Установить JQ library для обработки метаданных json с использованием командной строки.
  2. Прочитать существующие метаданные.

    aws s3api head-object --bucket <bucket> --key <key> | jq '.Metadata' | jq --compact-output '. +{"new":"metadata", "another" : "metadata"}'

  3. Добавить новые метаданные.

    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"}')

-1

Установите s3cmd инструменты (бесплатно) и вызывать s3cmd изменить --add-заголовок х-АМЗ-мета-Foo: бар s3: /// изменить: «s3: /// '

Foo - ключ бар - значение

Смежные вопросы