J'ai besoin de copier toutes les clés de '/ old/dir /' à '/ new/dir /' dans un seau amazon S3. je suis venu avec ce script (hack rapide):Comment copier efficacement tous les fichiers d'un répertoire à un autre dans un seau Amazon S3 avec 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)
Pour l'instant il fonctionne, mais est beaucoup plus lent que ce que je peux faire manuellement dans la console managment graphique par simplement copier/coller avec la souris. Très frustrant et il y a beaucoup de clés à copier ...
Connaissez-vous une méthode plus rapide? Merci. Edit: peut-être que je peux le faire avec des processus de copie simultanés. Je ne suis pas vraiment familier avec les méthodes de clés de copie boto et combien de processus simultanés je peux envoyer à amazon. Edit2: j'apprends actuellement le multitraitement Python. Voyons si je peux envoyer 50 opérations de copie simultanément ...
Édition 3: J'ai essayé avec 30 copies simultanées en utilisant le module multitraitement Python. La copie était beaucoup plus rapide que dans la console et moins sujette aux erreurs. Il y a un nouveau problème avec les gros fichiers (> 5Go): boto lève une exception. J'ai besoin de déboguer ceci avant de poster le script mis à jour.
Avez-vous essayé REST-copier un objet (http://docs.amazonwebservices.com/AmazonS3/latest/API/ RESTObjectCOPY.html? R = 7426)? Je voudrais essayer, peut-être que c'est plus rapide ... – Viccari
J'espère que boto appelle déjà cette API, mais je n'ai pas vérifié – ascobol
Donc, je le fais :) Mais j'ai appris à la dure que ça ne blesse pas ... – Viccari