как массово изменить имена папок в 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, используя SDK boto:

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