#!/bin/bash # Bash script to sync local activation code directory to the correct location on the Unraid server's boot device # Usage: ./sync_files.sh --local-directory --remote-host [--remote-path ] [--remove-password] # Example usage: # ./plugin/scripts/rsync-activation-dir.sh --local-directory /Users/zack/Downloads/activation_code_pdfs_12_19_2024_1436 --remote-host unraid.local --remove-password # Default values REMOTE_PATH="/boot/config/activation" REMOVE_PASSWORD=false # Parse named flag parameters while [[ $# -gt 0 ]]; do case $1 in --local-directory) LOCAL_DIRECTORY="$2" shift 2 ;; --remote-host) REMOTE_HOST="$2" shift 2 ;; --remote-path) REMOTE_PATH="$2" shift 2 ;; --remove-password) REMOVE_PASSWORD=true shift ;; *) echo "Unknown option: $1" echo "Usage: $0 --local-directory --remote-host [--remote-path ] [--remove-password]" exit 1 ;; esac done # Validate required parameters if [[ -z "$LOCAL_DIRECTORY" ]]; then echo "Error: --local-directory is required." exit 1 fi if [[ -z "$REMOTE_HOST" ]]; then echo "Error: --remote-host is required." exit 1 fi # Check if local directory ends with a slash if [[ "$LOCAL_DIRECTORY" != */ ]]; then echo "The local directory does not end with a slash." read -p "Do you want to append a slash to upload its contents? (y/n): " RESPONSE if [[ "$RESPONSE" =~ ^[Yy]$ ]]; then LOCAL_DIRECTORY+="/" fi fi # First, remove any existing password files on the remote server ssh "root@$REMOTE_HOST" "rm -rf $REMOTE_PATH/*" || { echo "Error: Failed to clean remote directory" exit 1 } # Remove Unraid password file if requested if [[ "$REMOVE_PASSWORD" == true ]]; then read -p "Do you want to remove any existing Unraid license keys on the server? (y/n): " REMOVE_KEYS if [[ "$REMOVE_KEYS" =~ ^[Yy]$ ]]; then ssh "root@$REMOTE_HOST" "rm -f /boot/config/*.key" || { echo "Error: Failed to remove Unraid license keys" exit 1 } echo "Removed Unraid license keys" fi ssh "root@$REMOTE_HOST" "rm -f /boot/config/passwd /boot/config/shadow /boot/config/super.dat" || { echo "Error: Failed to remove Unraid password file" exit 1 } echo "Removed Unraid password file" fi # Execute the rsync command and capture its output RSYNC_OUTPUT=$(rsync -av --no-owner --no-group --no-perms -e ssh "$LOCAL_DIRECTORY" "root@$REMOTE_HOST:$REMOTE_PATH" 2>&1) RSYNC_EXIT_CODE=$? # Output the rsync command's output echo "$RSYNC_OUTPUT" # Check if the command was successful if [ $RSYNC_EXIT_CODE -eq 0 ]; then echo "Files synchronized successfully!" else echo "An error occurred during synchronization." exit 1 fi