57 lines
1.7 KiB
Bash
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
|