Browse Source

Add a ftp mirror shell script wrapper around lftp

Emmanuel Bouthenot 12 years ago
parent
commit
ddf15e2d11
1 changed files with 99 additions and 0 deletions
  1. 99 0
      .zsh.d/bin/lftp-mirror

+ 99 - 0
.zsh.d/bin/lftp-mirror

@@ -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