$ 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 mediawikipobieram całość
$ ftp.borzole.net.sh pullalbo tylko wybrany folder
$ ftp.borzole.net.sh pull doc/phpPo 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/phpDobra, 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:
Prześlij komentarz