|
@@ -0,0 +1,99 @@
|
|
|
+#!/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
|