Je ne parviens pas à télécharger plusieurs fichiers à partir des compartiments AWS S3 sur mon ordinateur local.
J'ai tous les noms de fichiers que je veux télécharger et je ne veux pas d'autres. Comment puis je faire ça ? Existe-t-il une boucle dans aws-cli pour effectuer des itérations?
Il y a quelques centaines de fichiers à télécharger, de sorte qu'il ne semble pas possible d'utiliser une seule commande prenant tous les noms de fichiers comme arguments.
Il y a un script bash qui peut lire tous les noms de fichiers d'un fichier filename.txt
.
#!/bin/bash
set -e
while read line
do
aws s3 cp s3://bucket-name/$line dest-path/
done <filename.txt
Vous pouvez également utiliser l'option --recursive
, comme décrit dans la commande documentation for cp
. Il copiera tous les objets sous un préfixe spécifié de manière récursive. Par exemple.:
aws s3 cp s3://folder1/folder2/folder3 . --recursive
va récupérer tous les fichiers sous folder1/folder2/folder3 et les copier dans le répertoire local.
Vous voudrez peut-être utiliser "sync" au lieu de "cp". Les éléments suivants téléchargeront/synchroniseront uniquement les fichiers portant l’extension ".txt" dans votre dossier local:
aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket .
Selon le doc vous pouvez également utiliser les filtres include
et exclude
avec s3 cp
. Donc, vous pouvez faire quelque chose comme ça:
aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
Assurez-vous que l'ordre des filtres exclude
et include
est correct, car cela pourrait changer tout le sens.