Necesito copiar todas las claves de '/ old/dir /' a '/ new/dir /' en un cubo amazon S3. me ocurrió con este script (corte rápido):Cómo copiar de manera eficiente todos los archivos de un directorio a otro en un cubo S3 de Amazon con boto?
import boto
s3 = boto.connect_s3()
thebucket = s3.get_bucket("bucketname")
keys = thebucket.list('/old/dir')
for k in keys:
newkeyname = '/new/dir' + k.name.partition('/old/dir')[2]
print 'new key name:', newkeyname
thebucket.copy_key(newkeyname, k.bucket.name, k.name)
Por ahora se está trabajando, pero es mucho más lento que lo que pueda hacer de forma manual en la consola de gerencia gráfica con sólo copiar/pasado con el ratón. Muy frustrante y hay muchas claves para copiar ...
¿Conoces algún método más rápido? Gracias.
Edición: tal vez pueda hacer esto con procesos de copia simultáneos. No estoy muy familiarizado con los métodos de copia de boto y cuántos procesos simultáneos puedo enviar a Amazon.
Edit2: actualmente estoy aprendiendo el multiprocesamiento de Python. Veamos si puedo enviar 50 operaciones de copia simultáneamente ...
Edición 3: Probé con 30 copias simultáneas usando el módulo de multiprocesamiento de Python. La copia fue mucho más rápida que dentro de la consola y menos propensa a errores. Hay un problema nuevo con archivos grandes (> 5Gb): boto plantea una excepción. Necesito depurar esto antes de publicar el script actualizado.
¿Has probado REST-copiando un objeto (http://docs.amazonwebservices.com/AmazonS3/latest/API/ RESTObjectCOPY.html? R = 7426)? Lo probaría, tal vez sea más rápido ... – Viccari
Espero que Boto llame a esta API, pero no revisé – ascobol
Entonces sí :) Pero aprendí por las malas que no hace daño ... – Viccari