#!/usr/bin/env bash # ----------------------------------------------------------------------------- # Title: scp-transfer # Developer: h@x # Date: 13. July 2025 # Purpose: Flexible SCP file transfer with user, host, port, and path flags # ----------------------------------------------------------------------------- set -euo pipefail usage() { echo "Usage: $0 -u -h -p -r -l [-d direction]" echo " -u SSH username (required)" echo " -h Remote host/IP (required)" echo " -p SSH port (required)" echo " -r Remote path (required)" echo " -l Local file or directory (required)" echo " -d Direction: 'upload' (default) or 'download'" exit 1 } USER="" HOST="" PORT="" REMOTE_PATH="" LOCAL_FILE="" DIRECTION="upload" while getopts ":u:h:p:r:l:d:" opt; do case $opt in u) USER="$OPTARG" ;; h) HOST="$OPTARG" ;; p) PORT="$OPTARG" ;; r) REMOTE_PATH="$OPTARG" ;; l) LOCAL_FILE="$OPTARG" ;; d) DIRECTION="$OPTARG" ;; *) usage ;; esac done # Validate required parameters if [[ -z "$USER" || -z "$HOST" || -z "$PORT" || -z "$REMOTE_PATH" || -z "$LOCAL_FILE" ]]; then usage fi # Perform SCP transfer based on direction if [[ "$DIRECTION" == "upload" ]]; then echo "Uploading $LOCAL_FILE to $USER@$HOST:$REMOTE_PATH (port $PORT)..." scp -P "$PORT" -r "$LOCAL_FILE" "$USER@$HOST:$REMOTE_PATH" elif [[ "$DIRECTION" == "download" ]]; then echo "Downloading $USER@$HOST:$REMOTE_PATH to $LOCAL_FILE (port $PORT)..." scp -P "$PORT" -r "$USER@$HOST:$REMOTE_PATH" "$LOCAL_FILE" else echo "Invalid direction: $DIRECTION" usage fi