example input file:
#Skip
DUMMY #Skip this after the name
#Skip
HOSTNAME
#!/bin/bash
# Define color codes
RED='\033[1;31m'
GREEN='\033[1;32m'
BLUE='\033[1;34m'
MAGENTA='\033[1;35m'
NC='\033[0m' # No Color
LOCAL_DIR="/Users/username/Downloads/Uploads"
REMOTE_USER="username"
REMOTE_HOSTS="hosts"
MSG1="\nThis script will recursively copy directories and \nfiles from your local machine to remote hosts.\n"
MSG2="\tLocal Source: $LOCAL_DIR\n\tHost names stored in file: $REMOTE_HOSTS\n"
MSG3=""
[[ -n ${MSG1} ]] && echo -e "${MAGENTA}$MSG1 ${NC}"
[[ -n ${MSG2} ]] && echo -e "${BLUE}$MSG2 ${NC}"
[[ -n ${MSG3} ]] && echo -e "${MAGENTA}$MSG3 ${NC}"
if [[ ! -f "$REMOTE_HOSTS" ]]; then
echo -e "${MAGENTA}Error: Remote hosts file not found: $REMOTE_HOSTS${NC}"
exit 1
fi
if [ -d "$LOCAL_DIR" ] && [ "$(ls -I "$LOCAL_DIR")" ]; then
echo -e "${GREEN}Directory exists. Starting copy...${NC}"
while read REMOTE_HOST || [[ -n "$REMOTE_HOST" ]]; do
#Remove anything after hashtag
REMOTE_HOST="${REMOTE_HOST%%#*}"
#Remove leading & trailing whitespace
REMOTE_HOST="$(echo "$REMOTE_HOST" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
[[ -z "$REMOTE_HOST" ]] && continue
echo "Processing host: $REMOTE_HOST"
scp -r "$LOCAL_DIR" "${REMOTE_USER}@${REMOTE_HOST}:~/."
if [ $? -eq 0 ]; then
echo -e "${GREEN}Copy completed successfully.${NC}"
else
echo -e "${RED}Error: Copy failed.${NC}"
fi
done <$REMOTE_HOSTS
else
echo -e "${RED}Directory does not exist or is empty: $LOCAL_DIR${NC}"
fi