Est-il possible de copier tous les fichiers d'un compartiment S3 à l'autre avec s3cmd?
Je suis assez heureux avec s3cmd, mais il y a une question: Comment faire pour copier tous les fichiers d'un compartiment S3 à l'autre? Est-il même possible?
EDIT: j'ai trouvé un moyen de copier des fichiers entre des seaux à l'aide de Python avec boto:
from boto.s3.connection import S3Connection
def copyBucket(srcBucketName, dstBucketName, maxKeys = 100):
conn = S3Connection(awsAccessKey, awsSecretKey)
srcBucket = conn.get_bucket(srcBucketName);
dstBucket = conn.get_bucket(dstBucketName);
resultMarker = ''
while True:
keys = srcBucket.get_all_keys(max_keys = maxKeys, marker = resultMarker)
for k in keys:
print 'Copying ' + k.key + ' from ' + srcBucketName + ' to ' + dstBucketName
t0 = time.clock()
dstBucket.copy_key(k.key, srcBucketName, k.key)
print time.clock() - t0, ' seconds'
if len(keys) < maxKeys:
print 'Done'
break
resultMarker = keys[maxKeys - 1].key
La synchronisation est presque aussi simple que la copie. Il y a des champs pour ETag, de la taille et de dernière modification disponibles pour les touches.
Peut-être que cela aide les autres.
- Hey, pouvez-vous faire de votre modifier répondre à la question et accepter? C'est vraiment une astuce utile!
- une raison quelconque vous utilisez le 'get_all_keys' par opposition à "liste"?
Vous devez vous connecter pour publier un commentaire.
s3cmd sync s3://from/this/bucket/s3://to/this/bucket/
Pour les options disponibles, veuillez utiliser:
$s3cmd --help
s3cmd sync s3://sample_bucket/ s3://staging_bucket/
a bien fonctionné pour moi.--check-md5
qui va vérifier les sommes de contrôle MD5 lorsque l'on compare les fichiers pour la synchronisation.AWS CLI semble faire le travail parfaitement, et a le bonus d'être officiellement prise en charge de l'outil.
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
La réponse avec le plus upvotes que je vous écris, c'est celui-ci:
C'est une réponse utile. Mais parfois, la synchronisation n'est pas ce dont vous avez besoin (il supprime les fichiers, etc.). Il m'a fallu beaucoup de temps pour comprendre ce non script alternative de simplement copier plusieurs fichiers entre des seaux. (OK, dans le cas illustré ci-dessous, il n'est pas entre les seaux. Il est entre de pas-vraiment-dossiers, mais il fonctionne entre les seaux de la même manière.)
Explication de la commande ci-dessus:
Dans mon esprit, mon exigence n'est pas récursive. Je veux simplement plusieurs fichiers. Mais récursive dans ce contexte dit juste s3cmd cp à gérer plusieurs fichiers. Grand.
C'est une drôle de façon de penser le problème. Commencez en sélectionnant de manière récursive tous les fichiers. Ensuite, exclure tous les fichiers. Attendez, quoi?
Maintenant nous parlons. Indiquer le préfixe de fichier (ou un suffixe, ou quel que soit le motif) que vous souhaitez inclure.
s3://sourceBucket/ s3://targetBucket/
Cette partie est assez intuitif. Si, techniquement, il semble enfreindre l'exemple documenté de s3cmd d'aide qui indique qu'un objet source doit être spécifié:
s3cmd cp s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
s3cmd sync --max-delete=0 s3://from s3://to
?--no-delete-removed
qui semble encore plus au point.J'avais besoin de copier un très grand seau j'ai donc adapté le code en question dans un multi version filetée et le mettre sur GitHub.
https://github.com/paultuckey/s3-bucket-to-bucket-copy-py
Vous pouvez également utiliser l'interface web pour le faire:
Que c'est.
Il est effectivement possible. Cela a fonctionné pour moi:
boto.s3.key
objet, voir ici. Mais c'est un bon moyen de directement copier/déplacer un fichier sans vous soucier des détails avec 'sous-dossiers" .mdahlman du code n'a pas fonctionné pour moi, mais cette commande copie tous les fichiers dans le bucket1 dans un nouveau dossier (commande crée également ce nouveau dossier) dans un seau 2.
Merci - je utiliser une version légèrement modifiée, où je ne copie que les fichiers qui n'existent pas ou sont de taille différente, et de vérifier sur la destination si la clé existe dans la source. J'ai trouvé cela un peu plus rapide pour la préparation de l'environnement de test:
J'ai écrit un script qui sauvegarde un compartiment S3: https://github.com/roseperrone/aws-backup-rake-task
- Je l'utiliser dans une tâche rake (pour une application Rails):
s3cmd ne cp uniquement avec des préfixes ou des caractères génériques, mais vous pouvez créer un script pour le comportement avec 's3cmd ls sourceBucket', et awk pour extraire le nom de l'objet. Ensuite, utilisez s3cmd cp sourceBucket/nom destBucket' pour copier chaque nom d'objet dans la liste.
- Je utiliser ces fichiers de commandes dans une fenêtre DOS sous Windows:
s3list.chauve-souris
s3copy.chauve-souris
Vous pouvez également utiliser s3funnel qui utilise le multi-threading:
https://github.com/neelakanta/s3funnel
exemple (sans la clé d'accès ou à clé secrète, les paramètres affichés):
s3funnel source-seau-liste nom | s3funnel dest-seau-nom de la copie --source-seau source-seau-nom-threads=10