File-Utilities/Filesystem/Transfer/scp-transfer

57 lines
1.7 KiB
Bash

#!/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 <user> -h <host> -p <port> -r <remote_path> -l <local_file> [-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