jedmund-svelte/scripts/list-backups.sh
Justin Edmund b4f76ab3f9 feat: add database backup and restore functionality
- Add bash scripts for automated database backup and restore
- Support both full and data-only backups
- Add npm scripts for easy database management
- Add backups/ directory to .gitignore
- Include documentation for backup procedures

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-19 01:58:37 +01:00

139 lines
No EOL
4 KiB
Bash
Executable file

#!/bin/bash
# List Database Backups Script
# Usage: ./scripts/list-backups.sh [all|local|remote|recent]
set -e
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
BACKUP_DIR="./backups"
# Check if backup directory exists
if [ ! -d "$BACKUP_DIR" ]; then
echo "No backups directory found. Run a backup first."
exit 1
fi
# Function to format file size
format_size() {
local size=$1
if [ $size -lt 1024 ]; then
echo "${size}B"
elif [ $size -lt 1048576 ]; then
echo "$((size/1024))KB"
elif [ $size -lt 1073741824 ]; then
echo "$((size/1048576))MB"
else
echo "$((size/1073741824))GB"
fi
}
# Function to list backups
list_backups() {
local pattern=$1
local title=$2
echo -e "${GREEN}${title}${NC}"
echo "----------------------------------------"
local count=0
while IFS= read -r file; do
if [ -f "$file" ]; then
local filename=$(basename "$file")
local size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
local formatted_size=$(format_size $size)
local modified=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$file" 2>/dev/null || stat -c "%y" "$file" 2>/dev/null | cut -d' ' -f1-2)
# Extract type and timestamp from filename
local type=$(echo $filename | cut -d'_' -f1)
local timestamp=$(echo $filename | grep -oE '[0-9]{8}_[0-9]{6}')
# Format timestamp
if [ ! -z "$timestamp" ]; then
local date_part=$(echo $timestamp | cut -d'_' -f1)
local time_part=$(echo $timestamp | cut -d'_' -f2)
local formatted_date="${date_part:0:4}-${date_part:4:2}-${date_part:6:2}"
local formatted_time="${time_part:0:2}:${time_part:2:2}:${time_part:4:2}"
local display_time="$formatted_date $formatted_time"
else
local display_time=$modified
fi
# Color code by type
case $type in
"local")
echo -e "${BLUE}$filename${NC}"
;;
"remote")
echo -e "${YELLOW}$filename${NC}"
;;
*)
echo "$filename"
;;
esac
echo " Size: $formatted_size | Created: $display_time"
echo ""
count=$((count + 1))
fi
done < <(ls -t $BACKUP_DIR/$pattern 2>/dev/null)
if [ $count -eq 0 ]; then
echo "No backups found"
else
echo "Total: $count backup(s)"
fi
echo ""
}
# Calculate total backup size
calculate_total_size() {
local total=0
for file in $BACKUP_DIR/*.sql.gz; do
if [ -f "$file" ]; then
local size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
total=$((total + size))
fi
done
echo $(format_size $total)
}
# Main logic
case "${1:-all}" in
"all")
list_backups "*.sql.gz" "All Backups"
echo -e "${GREEN}Total backup size: $(calculate_total_size)${NC}"
;;
"local")
list_backups "local*.sql.gz" "Local Backups"
;;
"remote")
list_backups "remote*.sql.gz" "Remote Backups"
;;
"recent")
echo -e "${GREEN}Recent Backups (last 5)${NC}"
echo "----------------------------------------"
ls -lht $BACKUP_DIR/*.sql.gz 2>/dev/null | head -5 || echo "No backups found"
;;
*)
echo "Usage: $0 [all|local|remote|recent]"
echo ""
echo "Options:"
echo " all - List all backups (default)"
echo " local - List only local database backups"
echo " remote - List only remote database backups"
echo " recent - Show 5 most recent backups"
exit 1
;;
esac
# Show legend
echo ""
echo "Legend:"
echo -e " ${BLUE}Blue${NC} = Local database backup"
echo -e " ${YELLOW}Yellow${NC} = Remote database backup"