123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/bin/sh
- set -e
- usage() {
- cat <<EOH
- USAGE: $(basename "$0") [OPTIONS]
- Mirror specified remote directory to local directory using lftp
- Options:
- -l Local directory (default: '$LOCAL_DIR')
- -r Remote directory (default: '$REMOTE_DIR')
- -R Reverse mirroring (default: $REVERSE)
- -u FTP username (default: '$USERNAME')
- -p FTP password (default: '$PASSWORD')
- -P FTP port (default: '$PORT')
- -n Dry-run mode (default: $DRYRUN)
- -v Verbose mode (default: $VERBOSE)
- EOH
- }
- LOCAL_DIR=
- REMOTE_DIR=
- REVERSE=0
- USERNAME="anonymous"
- PASSWORD="${USER}@$(dnsdomainname)"
- PORT=21
- DRYRUN=0
- VERBOSE=0
- while getopts "l:r:u:p:P:nvRh" OPT ; do
- case "$OPT" in
- \?|h)
- usage
- exit 0
- ;;
- l)
- LOCAL_DIR="$OPTARG"
- ;;
- r)
- REMOTE_DIR="$OPTARG"
- ;;
- R)
- REVERSE=1
- ;;
- u)
- USERNAME="$OPTARG"
- ;;
- p)
- PASSWORD="$OPTARG"
- ;;
- P)
- PORT="$OPTARG"
- ;;
- n)
- DRYRUN=1
- ;;
- v)
- VERBOSE=1
- ;;
- esac
- done
- if [ -z "$LOCAL_DIR" ]; then
- printf "ERR: Local path is not defined (option -l)\n"
- usage
- exit 1
- fi
- if [ -z "$REMOTE_DIR" ]; then
- printf "ERR: Remote path is not defined (option -r)\n"
- usage
- exit 1
- fi
- if [ "$REVERSE" = 0 ] && [ ! -d "$LOCAL_DIR" ]; then
- mkdir -p "$LOCAL_DIR"
- fi
- MIRROR_OPTIONS="--delete-first --reverse --only-newer --no-perms --no-umask --ignore-time"
- if [ "$REVERSE" = 1 ]; then
- MIRROR_OPTIONS="$MIRROR_OPTIONS --reverse"
- fi
- if [ "$DRYRUN" = 1 ]; then
- MIRROR_OPTIONS="$MIRROR_OPTIONS --dry-run"
- fi
- if [ "$VERBOSE" = 1 ]; then
- MIRROR_OPTIONS="$MIRROR_OPTIONS --verbose"
- fi
- lftp -c "\
- set ftp:list-options -a; \
- lcd $LOCAL_DIR ; \
- open -u $USERNAME,$PASSWORD -p $PORT $REMOTE_DIR ; \
- mirror $MIRROR_OPTIONS \
- "
- exit 0
|