environment/bin/get

57 lines
1.2 KiB
Text
Raw Permalink Normal View History

ARCHIVE=false
DESTINATION_LOCAL_DIR="./"
if [[ "$1" == "--archive" ]]; then
ARCHIVE=true
shift
fi
if [[ $# -lt 2 ]]; then
echo "Usage: $0 [--archive] user@host remote_source_dir [local_destination_dir]"
exit 1
fi
USER_HOST="$1"
REMOTE_USER="${USER_HOST%@*}"
HOST="${USER_HOST#*@}"
REMOTE_SOURCE_DIR="$2"
if [[ -n "$3" ]]; then
DESTINATION_LOCAL_DIR="$3"
fi
if [[ "$REMOTE_SOURCE_DIR" = /* ]]; then
IS_ABSOLUTE=true
else
IS_ABSOLUTE=false
fi
echo "ARCHIVE=$ARCHIVE"
echo "REMOTE_USER=$REMOTE_USER"
echo "HOST=$HOST"
echo "REMOTE_SOURCE_DIR=$REMOTE_SOURCE_DIR"
echo "DESTINATION_LOCAL_DIR=$DESTINATION_LOCAL_DIR"
REMOTE_BASE_DIR=""
if $IS_ABSOLUTE; then
REMOTE_BASE_DIR="/"
else
REMOTE_BASE_DIR=/home/$REMOTE_USER
fi
# Example that works
# ssh debian@gurgul.org "tar --zstd -cf - -C /home/debian .dat" | tar --zstd -xf - -C .
# get debian@gurgul.org .dat
# get --archive debian@gurgul.org /etc
TAR_COMMAND="tar --zstd -cf - -C $REMOTE_BASE_DIR $REMOTE_SOURCE_DIR"
if $ARCHIVE; then
ssh $REMOTE_USER@$HOST $TAR_COMMAND > "$DESTINATION_LOCAL_DIR/$(basename "$REMOTE_SOURCE_DIR")-$(date +"%d-%m-%Y").tar.zst"
else
ssh $REMOTE_USER@$HOST $TAR_COMMAND | tar --zstd -xf - -C $DESTINATION_LOCAL_DIR
fi