diff --git a/backup.sh b/backup.sh index 69fc190c..2b7a3440 100755 --- a/backup.sh +++ b/backup.sh @@ -1,44 +1,25 @@ #!/usr/bin/env bash -############################################################################### -# Project Copy Script -# -# Copies a project while excluding generated and local-only directories. -# -# Excludes: -# - vendor/ -# - node_modules/ -# - .git/ -# - storage/ -# - bootstrap/cache/ -# - provision/ -# -# Usage: -# ./copy-project.sh /path/to/source /path/to/destination -# -############################################################################### - set -euo pipefail if [ "$#" -ne 2 ]; then echo "Usage:" - echo " $0 " + echo " $0 " exit 1 fi SOURCE="$(cd "$1" && pwd)" -DEST="$2" +BACKUP_ROOT="$2" +NAME="$(basename "$SOURCE")" +STAMP="$(date +"%Y%m%d-%H%M%S")" -echo "Source : $SOURCE" -echo "Destination : $DEST" -echo +WORK_DIR="$BACKUP_ROOT/${NAME}-${STAMP}" +ZIP_FILE="$BACKUP_ROOT/${NAME}-${STAMP}.zip" -mkdir -p "$DEST" - -echo "Copying..." +mkdir -p "$BACKUP_ROOT" +echo "Copying clean source..." rsync -a \ - --progress \ --delete \ --exclude=".git/" \ --exclude="vendor/" \ @@ -46,17 +27,22 @@ rsync -a \ --exclude="storage/" \ --exclude="bootstrap/cache/" \ --exclude="provision/" \ + --exclude="provisions/" \ "$SOURCE/" \ - "$DEST/" + "$WORK_DIR/" -echo -echo "Creating required empty directories..." +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" -mkdir -p "$DEST/storage" -mkdir -p "$DEST/bootstrap/cache" +echo "Creating zip..." +( + cd "$BACKUP_ROOT" + zip -qr "$(basename "$ZIP_FILE")" "$(basename "$WORK_DIR")" +) -touch "$DEST/storage/.gitkeep" -touch "$DEST/bootstrap/cache/.gitkeep" +echo "Deleting temporary backup folder..." +rm -rf "$WORK_DIR" -echo -echo "Done." +echo "Done:" +echo "$ZIP_FILE"