2014-07-11 5 views
0

J'ai téléchargé un tas d'images mais j'ai accidentellement nommé les dossiers avec des espaces. Maintenant vous ne pouvez pas y accéder parce que les urls ne peuvent évidemment pas avoir d'espaces.comment modifier en masse les noms de dossier dans amazon s3 avec un script

J'ai téléchargé le cla aws et je me demandais comment changer les noms de dossier? J'ai regardé la documentation mais j'ai toujours des problèmes et j'espère que quelqu'un pourra m'aider.

J'ai essayé la commande suivante sans aucun succès:

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

Comment puis-je changer le nom de « deuxième dossier avec des espaces » à « secondfolderwithspaces »?

De plus, existe-t-il un moyen de parcourir ces dossiers? Quelque chose comme

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

Quelle erreur obtenez-vous? Je suis capable d'utiliser la commande mv pour accomplir cette opération. –

+0

Vous pouvez également remplacer les espaces par un '+ 'pour vous en débarrasser sans renommer vos dossiers –

Répondre

4

que je le ferais via un script python utilisant le 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) 

Le script boucle à travers chaque objet, copie dans une nouvelle clé (qui ressemble à un nom de fichier, mais il inclut le chemin d'accès complet, y compris le nom du répertoire), puis supprime l'ancien objet. Il s'exécute entièrement dans Amazon S3 - le contenu des objets n'est pas téléchargé/téléchargé.

Modifiez la commande de remplacement en fonction de vos besoins.

-1

Les URL peuvent avoir des espaces. Vous devez les encoder. Le caractère d'espace devient "% 20". Si vous avez Chrome ou Firefox, ouvrez la console d'outils de Developper et tapez

encodeURI("second folder with spaces") 

Il imprime

second%20folder%20with%20spaces 

Pour le changement de nom de masse, il ne peut se faire de la même manière que vous traditionnellement serait sur un OS (Linux/Windows/Mac). Sur S3, vous ne pouvez pas renommer les fichiers, vous devez les copier. Vous devez donc télécharger leur contenu, les supprimer et les nouveaux fichiers.

Amazon S3 boto: How do you rename a file in a bucket?

Questions connexes