#!/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) # Check the number of arguments if [[ $# -lt 1 || $# -gt 2 ]]; then echo "Usage: $0 [directory_name]" exit 1 fi # Retrieve the arguments BUCKET="$1" DIRECTORY="$2" # Function to "sanitize" names for the output file sanitize_name() { echo "$1" | tr -dc '[:alnum:]-_.' } # Construct the output file name 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 # Construct the AWS CLI command COMMAND="aws s3api list-objects-v2 --bucket $BUCKET --query \"Contents[?StorageClass=='GLACIER']\"" # Add the prefix if a directory is specified if [[ -n "$DIRECTORY" ]]; then COMMAND+=" --prefix $DIRECTORY" fi # Finalize the command with formatted output COMMAND+=" --output text | awk '{print \$2}' > $OUTPUT_FILE" # Execute the command eval $COMMAND # Confirmation message echo "List of Glacier objects saved in $OUTPUT_FILE"