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
.
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"}]}'
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.
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
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"
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.