ftpsync.sh

download

#!/bin/sh

# DESCR: FTP syncing script
# AUTHOR: Dariusz Cieślak, cieslakd at gazeta.pl
#
# USAGE:
#
#   ftpsync remote_dir stamp_file [files...] | pftp hostname
#   touch stamp_file
#
# I know this is simple, but allows high flexibility
# A this time allows only two-level hierarchy od directories

REMOTE_DIR="$1"
STAMP="$2"

test -z "$STAMP" && {
    echo $0 remote_dir stamp_file
    exit 1
}
test -f $STAMP || touch $STAMP -d '1977-01-01'

find . -follow -newer $STAMP -a -type d |\
awk -vREMOTE_DIR="$REMOTE_DIR" '
BEGIN {
    FS = "/"
    print "mkdir " REMOTE_DIR
    print "cd " REMOTE_DIR
}
$0 != "." {
    print "mkdir " $0
}

'

find . -follow -newer $STAMP -a -type f |\
awk -vREMOTE_DIR="$REMOTE_DIR" '
BEGIN {
    FS = "/"
}
!/\.swp/ {
    if(NF > 2) {
        if($2 != DIR) {
            print "cd " $2
            print "lcd " $2
            DIR = $2
        }
        file=$3
    } else {
        if(DIR) {
            print "cd .."
            print "lcd .."
            DIR = ""
        }
        file=$2
    }
    print "put " file
    if(/cgi$/) {
        print "chmod 0755 " file
    }
}

'

(...) Nie ma bowiem łatwych odpowiedzi. Nie istnieje nic takiego jak najlepsze rozwiązanie - zarówno jeśli chodzi o narzędzia, jak i języki czy systemy operacyjne. Są jedynie systemy, które mogą być bardziej odpowiednie w konkretnych okolicznościach.

I tu właśnie do gry wchodzi pragmatyzm. Nie należy przywiązywać się do żadnej określonej metody, ale mieć na tyle rozległą wiedzę i doświadczenie, by w danej sytuacji wybrać dobre rozwiązanie. (...)

Andrew Hunt, David Thomas "Pragmatyczny Programista"