Files

47 lines
1017 B
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -ne 2 ]; then
echo "Usage:"
echo " $0 <source> <backup-directory>"
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"