как масово да променяте имена на папки в amazon s3 със скрипт

Качих куп изображения, но случайно наименувах папките с интервали. Сега нямате достъп до тях, защото очевидно URL адресите не могат да имат интервали.

Изтеглих aws cli и се чудех как да променя имената на папките? Разгледах документацията, но все още имам проблеми и се надявам някой да може да помогне.

Опитах командата по-долу без успех:

aws s3 mv "s3://mybucketname/firstfolder/second folder with spaces/" s3://mybucketname/firstfolder/secondfolderwithspaces/ --recursive

Как да променя името на "втора папка с интервали" на "втора папка с интервали"?

Също така, има ли начин да обикалям тези папки? Нещо като

for folder in s3:/bucketname/firstfolder: 
     aws s3 mv "folder with spaces" folderwithspaces --recursive

person Terence Chow    schedule 11.07.2014    source източник
comment
Каква грешка получавате? Мога да използвам командата mv, за да изпълня тази операция.   -  person Wade Matveyenko    schedule 11.07.2014
comment
Можете също да замените интервалите с някои +, за да се отървете от това, без да преименувате папките си   -  person Balthazar    schedule 29.09.2014


Отговори (2)


Бих го направил чрез скрипт на python, използвайки boto SDK:

import boto

conn = boto.s3.connect_to_region('ap-southeast-2')
bucket = conn.get_bucket('bucket-name')
for k in bucket.list():
  if ' ' in k.key:
    bucket.copy_key(k.key.replace(' ', '+'), bucket.name, k.key)
    bucket.delete_key(k.key)

Скриптът преминава през всеки обект, копира го в нов ключ (който е като име на файл, но включва пълния път, включително името на директорията), след което изтрива стария обект. Той се изпълнява напълно в рамките на Amazon S3 -- съдържанието на обектите не се изтегля/качва.

Променете командата за замяна, за да отговаря на вашите нужди.

person John Rotenstein    schedule 17.11.2014

URL адресите могат да имат интервали. Трябва да ги кодирате. Символът за интервал става "%20". Ако имате chrome или firefox, отворете конзолата с инструменти за разработчици и въведете

encodeURI("second folder with spaces")

Отпечатва се

second%20folder%20with%20spaces

За масовото преименуване не може да се направи по същия начин, както бихте направили традиционно на операционна система (Linux/Windows/Mac). На S3 не можете да преименувате файлове, трябва да ги копирате. Така че трябва да изтеглите тяхното съдържание, да ги изтриете и нови файлове.

Amazon S3 boto: Как се преименува файл в кофа?

person Finch_Powers    schedule 12.07.2014