J'ai un compartiment S3 qui contient des sauvegardes de base de données. Je suis en train de créer un script que je voudrais télécharger la dernière sauvegarde (et éventuellement le restaurer ailleurs), mais je ne sais pas comment s'y prendre uniquement pour récupérer le fichier le plus récent dans un compartiment.
Est-il possible de copier uniquement le fichier le plus récent d'un compartiment s3 vers un répertoire local à l'aide des outils AWS CLI?
C'est une approche que vous pouvez adopter.
Vous pouvez répertorier tous les objets du compartiment avec aws s3 ls $BUCKET --recursive
:
$ aws s3 ls $BUCKET --recursive
2015-05-05 15:36:17 4 an_object.txt
2015-06-08 14:14:44 16322599 some/other/object
2015-04-29 12:09:29 32768 yet-another-object.sh
Ils sont triés alphabétiquement par clé, mais cette première colonne correspond à la dernière modification. Un rapide sort
les réorganisera par date:
$ aws s3 ls $BUCKET --recursive | sort
2015-04-29 12:09:29 32768 yet-another-object.sh
2015-05-05 15:36:17 4 an_object.txt
2015-06-08 14:14:44 16322599 some/other/object
tail -n 1
sélectionne la dernière ligne et awk '{print $4}'
extrait la quatrième colonne (le nom de l'objet).
$ aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'
some/other/object
Enfin et surtout, déposez-le dans aws s3 cp
pour télécharger l'objet:
$ KEY=`aws s3 ls $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}'`
$ aws s3 cp s3://$BUCKET/$KEY ./latest-object
Et voici un script bash créé basé sur la réponse de @ error2007s. Ce script requiert votre profil aws et le nom du compartiment en tant que variables et télécharge le dernier objet dans votre dossier ~/Downloads:
#!/bin/sh
PROFILE=your_profile
BUCKET=your_bucket
OBJECT="$(aws s3 ls --profile $PROFILE $BUCKET --recursive | sort | tail -n 1 | awk '{print $4}')"
aws s3 cp s3://$BUCKET/$OBJECT ~/Downloads/$OBJECT --profile $PROFILE
Les solutions ci-dessus sont pour Bash si l'on veut faire la même chose dans Powershell pour le téléchargement dans Windows en utilisant le script suivant:
$s3location = 's3://bucket/'
$filename=C:\Progra~1\Amazon\AWSCLI\aws.exe s3 ls s3://bucket/PROD_FULL/ --
recursive | sort |select -last 3
$Dpath='I:\Data_S3'
foreach($files in $filename)
{
#$files.ToString()
$testpath1 = Split-Path $path -leaf
$testpath1
$path=$s3location+$files
C:\Progra~1\Amazon\AWSCLI\aws.exe s3 cp $path $Dpath
echo(" ***Files Downloaded ***")
}