Post.sh

De Cartola

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"
RECEBE="recebe.php"
PASTA="zzz/`pwd | sed -e 's/.*\///'`"
export http_proxy="http://conta:senha@10.0.0.2:8080"
LOG=`date +%Y%m%d`-log.txt

# Antes de tudo, criando pasta destino
$WGET -O saida --post-data="criapasta=$PASTA" $URL/$RECEBE 2> /dev/null
# Depois altera a URL para postar direto para a pasta criada
URL="$URL/$PASTA/$RECEBE"

for ARQ in $*; do
  # 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." >> $LOG
    else
      echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQFIN transmitido com erro." >> $LOG
    fi
  done
  # Juntando arquivo remoto, se necessario
  if [ "$ARQ" != "$ENVIAR" ]; then
    rm -f ${ARQ}.*
    $WGET -O saida --post-data="juntar=$ARQ" $URL > /dev/null 2> /dev/null
    MD5local=`$MD5CMD $ARQ | awk '{print $NF}'`
    MD5remoto=`cat saida | grep "$ARQ : " | awk '{print $NF}'`
    if [ "$MD5local" = "$MD5remoto" ]; then
      echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQ juntado ok." >> $LOG
      mv $ARQ foi-$ARQ
    else
      echo "`date '+%Y/%m/%d-%H:%M:%S'` - $ARQ juntado com erro." >> $LOG
    fi
  fi
  rm -f saida query_string
done