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
