Essa é uma revisão anterior do documento!
Script principal “post.sh”, que chama “post.php” e envia arquivos para “recebe.php”
Atenção: esse script se tornou dependente de FreeBSD com o uso do “ls -lT” para obter timestamp do arquivo na origem. Não obstante funcionará, sem ajustar timestamp, em outros sistemas.
#!/bin/sh
# Script para enviar arquivos via web para servidor http. Este servidor precisa ter o arquivo # recebe.php especifico. A ideia eh partir os arquivos a serem enviados em blocos de tamanho # limite para transferencia.
LIMITE=“5000000” WGET=“/usr/local/bin/wget” MD5CMD=“/sbin/md5” URL=“http://servidor.remoto.com/caminhoQualquer/recebe.php” export http_proxy=“http://conta:senha@10.0.0.2:8080”
if [ -f saida ]; then
echo "Erro: arquivo \"saida\" ja existe" exit
fi
for ARQ in $*; do
# Verificando se pode ser enviado o arquivo - negado se ja existir com mesmo nome $WGET -O saida "${URL}?verifica=$ARQ" 2> /dev/null > /dev/null TESTE=`grep ERRO saida` if [ "$TESTE" = "ERRO" ]; then echo "Erro: $ARQ ja existe no servidor" else # Verificando necessidade de partir e partindo TAM=`ls -l $ARQ | awk '{print $5}'` if [ $TAM -gt $LIMITE ]; then split -b $LIMITE $ARQ ${ARQ}. ENVIAR=`ls ${ARQ}.*` else ENVIAR="$ARQ" fi # Enviando arquivo inteiro ou pedacos for ARQFIN in $ENVIAR; do /usr/local/bin/php -e post.php $ARQFIN $WGET -O saida --post-file=query_string $URL \ > /dev/null 2> /dev/null MD5local=`$MD5CMD $ARQFIN | awk '{print $NF}'` MD5remoto=`cat saida | grep "$ARQFIN : " | awk '{print $NF}'` if [ "$MD5local" = "$MD5remoto" ]; then echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQFIN transmitido ok." else echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQFIN transmitido com erro." fi done # Juntando arquivo remoto, se necessario # Aproveitando para acertar data do arquivo conforme arquivo local if [ "$ARQ" != "$ENVIAR" ]; then rm -f ${ARQ}.* $WGET -O saida --post-data="juntar=$ARQ" $URL > /dev/null 2> /dev/null # conferindo arquivo com md5 MD5local=`$MD5CMD $ARQ | awk '{print $NF}'` MD5remoto=`cat saida | grep "$ARQ : " | awk '{print $NF}'` # calculando timestamp do arquivo para acertar no servidor export LC_ALL="en_us.ISO8859-1" TS=`ls -lT $ARQ | awk '{printf "%02s %s %s %s\n", $6, $7, $8, $9}' | \ sed -e 's/Jan/01/' \ -e 's/Feb/02/' -e 's/Fev/02/' \ -e 's/Mar/03/' \ -e 's/Apr/04/' -e 's/Abr/04/' \ -e 's/May/05/' -e 's/Mai/05/' \ -e 's/Jun/06/' \ -e 's/Jul/07/' \ -e 's/Aug/08/' -e 's/Ago/08/' \ -e 's/Sep/09/' -e 's/Set/09/' \ -e 's/Oct/10/' -e 's/Out/10/' \ -e 's/Nov/11/' \ -e 's/Dec/12/' -e 's/Dez/12/' \ -e 's/://' -e 's/:/./' | \ awk '{printf "%s%s%s%s",$4,$2,$1,$3}' ` # retomando verificacao md5 if [ "$MD5local" = "$MD5remoto" ]; then echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQ juntado ok." mv $ARQ foi-$ARQ else echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQ juntado com erro." fi fi # finalizando ajuste de data remoto $WGET -O saida --post-data="touch=$ARQ&ts=$TS" $URL > /dev/null 2> /dev/null rm -f saida query_string fi
done