web-dev-qa-db-fra.com

Comment supprimer plusieurs fichiers dans le compartiment S3 avec AWS CLI

Supposons que j'ai un compartiment S3 nommé x.y.z

Dans ce compartiment, j'ai des centaines de fichiers. Mais je veux seulement supprimer 2 fichiers nommés purple.gif et worksheet.xlsx

Puis-je le faire à partir de l'outil de ligne de commande AWS avec un seul appel à rm

Cela n'a pas fonctionné:

$ aws s3 rm s3://x.y.z/worksheet.xlsx s3://x.y.z/purple.gif
Unknown options: s3://x.y.z/purple.gif

Dans le répertoire manual , il ne semble pas que vous puissiez supprimer explicitement une liste de fichiers par son nom. Est-ce que quelqu'un sait un moyen de le faire? Je préfère ne pas utiliser le drapeau --recursive.

10
Saqib Ali

Vous ne pouvez pas utiliser s3 rm, mais vous pouvez utiliser s3api delete-objects :

aws s3api delete-objects --bucket x.y.z --delete '{"Objects":[{"Key":"worksheet.xlsx"},{"Key":"purple.gif"}]}'
9
spg

Vous pouvez le faire en fournissant un argument --exclude ou --include plusieurs fois. Mais vous devrez utiliser --recursive pour que cela fonctionne.

Quand il y a plusieurs filtres, rappelez-vous que l'ordre des paramètres de filtre est important. La règle est que les filtres qui apparaissent plus tard dans la commande ont priorité sur les filtres qui apparaissent plus tôt dans la commande.

aws s3 rm s3://x.y.z/ --recursive --exclude "*" --include "purple.gif" --include "worksheet.xlsx"

Ici, tous les fichiers seront exclus de la commande sauf purple.gif et worksheet.xlsx.

Source: Utilisation des filtres d'exclusion et d'inclusion

22
Khalid T.

J'ai trouvé celui-ci utile via la ligne de commande. J'ai eu plus de 4 millions de fichiers et il a fallu presque une semaine pour vider le seau. Cela est pratique car la console AWS n'est pas descriptive avec les journaux. 

Remarque: jquery doit être installé.

 aws s3api list-object-versions --bucket YOUrBUCKEtNAMeHERe-processed --output json --query 'Versions[].[Key, VersionId]' | jq -r '.[] | "--key '\''" + .[0] + "'\'' --version-id " + .[1]' | xargs -L1 aws s3api delete-object --bucket YOUrBUCKEtNAMeHERe
1
coder

Remarquerez que:

aws s3 rm s3://x.y.z/ --recursive --include "\*.gif" supprime tous les fichiers du chemin, y compris "\*.gif"

aws s3 rm s3://x.y.z/ --recursive --exclude "\*" --include "\*.gif" supprime uniquement les fichiers correspondant à "\*.gif"

0
ddrypczewski

Apparemment, aws s3 rm ne fonctionne que sur des fichiers/objets individuels.

Vous trouverez ci-dessous une commande bash qui fonctionne avec un certain succès (un peu lent, mais qui fonctionne):

aws s3 ls s3://bucketname/foldername/ | 
awk {'print "aws s3 rm s3://bucketname/foldername/" $4'} | 
bash

Notez que vous pourriez être confronté à des problèmes si vos noms d'objet comportent des espaces ou des caractères amusants. En effet, la commande "aws s3 ls" ne listera pas de tels objets.

0
Thyag