«««

12 października 2010

FTP jak Dropbox

Do codziennego przeglądania ftp korzystam z FileZilla, ale przydaje się czasem mechanizm bezmózgowej synchronizacji ftp z lokalnym folderem.
$ cat ./ftp.borzole.net.sh
#!/bin/bash

# synchronizacja z ftp://borzole.net

HOST="borzole.net"
USER="borzole"
PASS="123tajne"
LOCAL="${HOME}/studio/${HOST}" # lokalny korzeń
mkdir -p "$LOCAL"

LCD="$LOCAL/$2" # folder lokalny
RCD="/$2"       # folder zdalny

MIRROR='mirror'
MIRROR+=' --verbose'
MIRROR+=' --exclude-glob ".ftpquota"'  # ignorowany plik
MIRROR+=' --exclude-glob "mediawiki/"' # ignorowany folder

transfer(){
    lftp -c "set ftp:list-options -a;
    open ftp://$USER:$PASS@$HOST;
    $* "
}

case $1 in
    ls)   transfer "cd $RCD ; ls" ;;
    pull) transfer $MIRROR "$RCD" "$LCD" ;;
    push) transfer $MIRROR --reverse --delete "$LCD" "$RCD" ;;
    *) echo -e "Użycie:\n\t${0##*/} {ls|pull|push} doc/php" >&2 ;;
esac
O szczegółach jak to działa i co można dopisać proszę poczytać w man lftp
Wyjście z przykładowej sesji:
$ ftp.borzole.net.sh
Użycie:
    ftp.borzole.net.sh {ls|pull|push} doc/php
sprawdzam co jest na koncie
$ ftp.borzole.net.sh ls
drwx------    7 330        330              2048 Oct 12 11:53 .
drwx------    7 330        330              2048 Oct 12 11:53 ..
-rw-------    1 330        330                14 Oct 12 12:37 .ftpquota
-rw-r--r--    1 330        330               154 Jul 22  2009 .php.ini
drwxr-xr-x    2 330        330              2048 Oct 12 11:52 MySQLadmin
drwxr-xr-x    2 330        330              2048 Oct 12 11:52 PgSQLadmin
drwxr-xr-x    2 330        330              2048 Oct 12 11:47 borzole
drwxr-xr-x    4 330        330              2048 Oct 12 11:52 doc
-rw-r--r--    1 330        330               385 Mar  2  2010 index.php
drwxr-xr-x    9 330        330              2048 Oct 12 12:22 mediawiki
pobieram całość
$ ftp.borzole.net.sh pull
albo tylko wybrany folder
$ ftp.borzole.net.sh pull doc/php
Po wykonaniu modyfikacji mogę wysłać/zsynchronizować folder w drugą stronę
Uwaga! to polecenie usunie na zdalnym serwerze wszystkie pliki, których nie ma lokalnie.
Z tego powodu zalecam dwa razy się zastanowić, zanim coś wypchniemy na serwer.
$ ftp.borzole.net.sh push doc/php
Dobra, to czemu to jest lepsze niż np. FileZilla? Bo mogę połączyć to z inotify (fsniper, inotify-tools, incron) i mieć automatyczną synchronizację folderu podobnie jak to robi Dropbox. Używam do tego fsniper z prostą regułką:
$ cat ~/.config/fsniper/config
watch {
    ~/studio/borzole.net/doc {
        recurse = true
        * {
            handler = /path/to/script/ftp.borzole.net.sh push doc
        }
    }
}

Brak komentarzy: