tidy up
This commit is contained in:
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Git Restore Script for Latest Backup
|
||||
# Usage: ./restore_git_backup.sh [project_name] (optional - restore specific project)
|
||||
|
||||
# Configuration
|
||||
BACKUP_DIR="/mnt/nas/Jake/git_backups"
|
||||
REPO_SOURCE="$HOME/source/"
|
||||
|
||||
# Function to restore a single project from latest backup
|
||||
restore_project() {
|
||||
local project_name="$1"
|
||||
local latest_backup=$(find "$BACKUP_DIR" -maxdepth 1 -type d -name "*" | sort -r | head -n 1)
|
||||
|
||||
if [ -z "$latest_backup" ]; then
|
||||
echo "Error: No backups found in $BACKUP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local project_backup_path="${latest_backup}/${project_name}"
|
||||
|
||||
if [ ! -d "$project_backup_path" ]; then
|
||||
echo "Error: Backup for project '$project_name' not found in latest backup"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local target_dir="$REPO_SOURCE/$project_name"
|
||||
|
||||
echo "Restoring $project_name from latest backup..."
|
||||
|
||||
# Check if project already exists and is up to date
|
||||
if [ -d "$target_dir" ]; then
|
||||
local backup_mtime=$(stat -c %Y "${project_backup_path}/backup.tar" 2>/dev/null || echo 0)
|
||||
local repo_mtime=$(stat -c %Y "$target_dir" 2>/dev/null || echo 0)
|
||||
|
||||
if [ "$repo_mtime" -ge "$backup_mtime" ]; then
|
||||
echo " Skipped $project_name (already up to date)"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create the project directory if it doesn't exist
|
||||
mkdir -p "$target_dir"
|
||||
|
||||
# Extract the backup to the source directory (overwrite existing files)
|
||||
tar -xf "${project_backup_path}/backup.tar" -C "$target_dir"
|
||||
|
||||
echo "Successfully restored $project_name from backup"
|
||||
}
|
||||
|
||||
# Main restore function
|
||||
main_restore() {
|
||||
local latest_backup=$(find "$BACKUP_DIR" -maxdepth 1 -type d -name "*" | sort -r | head -n 1)
|
||||
|
||||
if [ -z "$latest_backup" ]; then
|
||||
echo "Error: No backups found in $BACKUP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Latest backup directory: $latest_backup"
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
# Restore all projects from latest backup
|
||||
echo "Restoring all projects from latest backup..."
|
||||
|
||||
# Get list of project directories in the backup
|
||||
local projects=($(ls "$latest_backup"))
|
||||
|
||||
for project in "${projects[@]}"; do
|
||||
restore_project "$project"
|
||||
done
|
||||
else
|
||||
# Restore specific project
|
||||
local target_project="$1"
|
||||
restore_project "$target_project"
|
||||
fi
|
||||
|
||||
echo "Restore completed successfully!"
|
||||
}
|
||||
|
||||
# Run main restore function
|
||||
main_restore "$@"
|
||||
Reference in New Issue
Block a user