#!/usr/bin/env bash set -euo pipefail if [ "$#" -ne 2 ]; then echo "Usage:" echo " $0 " exit 1 fi SOURCE="$(cd "$1" && pwd)" BACKUP_ROOT="$2" NAME="$(basename "$SOURCE")" STAMP="$(date +"%Y%m%d-%H%M%S")" WORK_DIR="$BACKUP_ROOT/${NAME}-${STAMP}" ZIP_FILE="$BACKUP_ROOT/${NAME}-${STAMP}.zip" mkdir -p "$BACKUP_ROOT" echo "Copying clean source..." rsync -a \ --delete \ --exclude=".git/" \ --exclude="node_modules/" \ --exclude="storage/" \ --exclude="bootstrap/cache/" \ --exclude="provision/" \ "$SOURCE/" \ "$WORK_DIR/" # --exclude="vendor/" \ echo "Recreating required empty Laravel directories..." mkdir -p "$WORK_DIR/storage" "$WORK_DIR/bootstrap/cache" touch "$WORK_DIR/storage/.gitkeep" "$WORK_DIR/bootstrap/cache/.gitkeep" echo "Creating zip..." ( cd "$BACKUP_ROOT" zip -qr "$(basename "$ZIP_FILE")" "$(basename "$WORK_DIR")" ) echo "Deleting temporary backup folder..." rm -rf "$WORK_DIR" echo "Done:" echo "$ZIP_FILE"