Ferramentas do usuário

Ferramentas do site


post.sh

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

post.sh.1225912383.txt.gz · Última modificação: 2008/11/05 17:13 por cartola