#!/bin/bash # Usage: curl https://tools-scr.apps360.id/backup-files/backup-dir.sh | bash -s -- # Usually Args Value: # ------------------- # BUCKET_NAME: dev-app-archives|prod-app-archives # APP_NAME: # No Space # CURRENT_INSTANCE_NAME: # APP_SERVICE_NAME: # BASE_DIR: /home/user/projects/myproject # BAC_DIR: # RETENTION: 2|7 BUCKET_NAME="$1" APP_NAME="$2" CURRENT_INSTANCE_NAME="$3" APP_SERVICE_NAME="$4" BASE_DIR="$5" BAC_DIR="$6" RETENTION="$7" set -euo pipefail # Configuration TIMESTAMP=$(date +"%Y%m%d-%H%M%S") ZIP_NAME="${APP_NAME}_${APP_SERVICE_NAME}-$TIMESTAMP.zip" # S3 paths S3_BASE="s3://${BUCKET_NAME}/${APP_NAME}/${CURRENT_INSTANCE_NAME}/${APP_SERVICE_NAME}" S3_PATH="$S3_BASE/$ZIP_NAME" S3_PARENT="${S3_BASE}/" # Navigate to base directory cd "$BASE_DIR" || { echo "Directory not found: $BASE_DIR" exit 1 } # Stream zip directly to S3 echo "Streaming zip of '${BAC_DIR}' to $S3_PATH..." zip -r - "$BAC_DIR" | s3cmd put - "$S3_PATH" # Delete S3 files older than retention period echo "Cleaning up S3 files older than $RETENTION days..." s3cmd ls "$S3_PARENT" | while read -r line; do FILE=$(echo "$line" | awk '{print $4}') FILENAME=$(basename "$FILE") if [[ "$FILENAME" =~ web-([0-9]{8})-([0-9]{6})\.zip ]]; then FILE_DATE="${BASH_REMATCH[1]}" FILE_TIME="${BASH_REMATCH[2]}" FILE_TS=$(date -d "${FILE_DATE}${FILE_TIME}" +%s) CUTOFF_TS=$(date -d "$RETENTION days ago" +%s) if (( FILE_TS < CUTOFF_TS )); then echo "Deleting old S3 file: $FILE" s3cmd del "$FILE" fi fi done echo "✅ Upload complete. No local zip file was created."