#!/bin/bash # This script lists objects stored in the Glacier storage class within an S3 bucket. # It optionally filters the list based on a specified directory within the bucket. # The output is saved to a text file with a sanitized name based on the bucket and directory. # Example usage: # ./list-glacier-objects.sh my-bucket my-directory # (Lists objects in the 'my-directory' directory within the 'my-bucket' bucket) # ./list-glacier-objects.sh my-bucket # (Lists all objects in the 'my-bucket' bucket) # Vérification du nombre d'arguments if [[ $# -lt 1 || $# -gt 2 ]]; then echo "Utilisation: $0 [nom_du_répertoire]" exit 1 fi # Récupération des arguments BUCKET="$1" DIRECTORY="$2" # Fonction pour "nettoyer" les noms pour le fichier de sortie sanitize_name() { echo "$1" | tr -dc '[:alnum:]-_.' } # Construction du nom de fichier de sortie SANITIZED_BUCKET=$(sanitize_name "$BUCKET") if [[ -n "$DIRECTORY" ]]; then SANITIZED_DIRECTORY=$(sanitize_name "$DIRECTORY") OUTPUT_FILE="${SANITIZED_BUCKET}_${SANITIZED_DIRECTORY}_glacier-restore.txt" else OUTPUT_FILE="${SANITIZED_BUCKET}_glacier-restore.txt" fi # Construction de la commande AWS CLI COMMAND="aws s3api list-objects-v2 --bucket $BUCKET --query \"Contents[?StorageClass=='GLACIER']\"" # Ajout du préfixe si un répertoire est spécifié if [[ -n "$DIRECTORY" ]]; then COMMAND+=" --prefix $DIRECTORY" fi # Finalisation de la commande avec la sortie formatée COMMAND+=" --output text | awk '{print \$2}' > $OUTPUT_FILE" # Exécution de la commande eval $COMMAND # Message de confirmation echo "Liste des objets Glacier enregistrée dans $OUTPUT_FILE"