78 lines
2.6 KiB
Bash
Executable file
78 lines
2.6 KiB
Bash
Executable file
#!/bin/bash
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Synq Watch — Real-time Auto-Backup Watcher
|
|
# Triggers synq-auto-backup.sh after files change and a quiet
|
|
# period of 30 seconds elapses.
|
|
#
|
|
# Usage:
|
|
# synq-watch.sh [project-dir]
|
|
#
|
|
# Requires: inotifywait (install with: sudo apt install inotify-tools)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
set -euo pipefail
|
|
|
|
PROJECT_DIR="${1:-$(pwd)}"
|
|
QUIET_SECONDS=30
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
# ── Check dependency ──────────────────────────────────────────
|
|
if ! command -v inotifywait >/dev/null 2>&1; then
|
|
echo "✗ inotifywait not found. Install it with:"
|
|
echo " sudo apt install inotify-tools"
|
|
exit 1
|
|
fi
|
|
|
|
# ── Config ────────────────────────────────────────────────────
|
|
# File patterns to watch
|
|
WATCH_PATTERNS=(
|
|
-e modify -e create -e move -e delete
|
|
)
|
|
|
|
# Paths to exclude from watching
|
|
EXCLUDE_PATTERNS=(
|
|
--exclude 'target/'
|
|
--exclude 'node_modules/'
|
|
--exclude '.git/'
|
|
--exclude 'dist/'
|
|
--exclude 'build/'
|
|
--exclude '*.tmp'
|
|
--exclude '*.swp'
|
|
--exclude '*.log'
|
|
)
|
|
|
|
echo "═══ Synq Watch Started ═══"
|
|
echo " Project: $PROJECT_DIR"
|
|
echo " Quiet: ${QUIET_SECONDS}s after last change"
|
|
echo " Trigger: $SCRIPT_DIR/synq-auto-backup.sh"
|
|
echo ""
|
|
echo "Press Ctrl+C to stop"
|
|
echo ""
|
|
|
|
# ── Debounced backup loop ─────────────────────────────────────
|
|
while true; do
|
|
# Wait for any file event
|
|
inotifywait -r -q \
|
|
"${WATCH_PATTERNS[@]}" \
|
|
"${EXCLUDE_PATTERNS[@]}" \
|
|
"$PROJECT_DIR" 2>/dev/null || true
|
|
|
|
echo " [$(date +%H:%M:%S)] Change detected — waiting ${QUIET_SECONDS}s for quiet..."
|
|
|
|
# Debounce: keep resetting timer while changes keep coming
|
|
while true; do
|
|
if inotifywait -r -q -t "$QUIET_SECONDS" \
|
|
"${WATCH_PATTERNS[@]}" \
|
|
"${EXCLUDE_PATTERNS[@]}" \
|
|
"$PROJECT_DIR" 2>/dev/null; then
|
|
echo " [$(date +%H:%M:%S)] More changes — resetting timer..."
|
|
continue
|
|
fi
|
|
break
|
|
done
|
|
|
|
# Quiet period elapsed — run backup
|
|
echo " [$(date +%H:%M:%S)] Quiet period reached — running backup..."
|
|
"$SCRIPT_DIR/synq-auto-backup.sh" "$PROJECT_DIR"
|
|
echo ""
|
|
done
|