msoliver
(usa Debian)
Enviado em 07/04/2016 - 19:34h
gsanches escreveu:
Ola, estou com uma certa dificuldade para criar um script para download de arquivos via FTP.
Segue alguns pontos.
/PASTA1/SUB1/SUBS_1/arquivo1.txt
/PASTA2/SUB2/SUBS_2/arquivo2.txt
/PASTA3/SUB3/SUBS_3/arquivo3.txt
/PASTA4/SUB4/SUBS_4/arquivo4.txt
/PASTA5/SUB5/SUBS_5/arquivo5.txt
/PASTA1/SUB6/SUBS_6/arquivo6.txt
/PASTA1/SUB7/SUBS_7/arquivo7.txt
Esses 7 arquivos devem ser baixados em um diretório qualquer, porem a duvida...
Esses arquivos não possuem parâmetros de data, e sao atualizados a cada 30 min.
o que precisa fazer é: baixar cada um dos 7 arquivos a cada 30 minutos, e esse arquivo devera ser diferente, considerando diferente = a tamanho do arquivo ou data de modificação.
Apos baixar, os mesmos devem ser renomeados no diretório destino conforme exemplo:
arquivo1_dd/mm/yyyy hh:mm.txt
Podem me ajudar?
Boa noite, gsanches.
Vamos lá....
Troquei a "/" do nome do arquivo por "-", o motivo é simples...
Não é aceito "/" no nome do arquivo!
Segue uma "prévia" do Código:
#!/bin/bash
#######################
## marcelo oliver ##
## Abril/2016-Rev:00 ##
#######################
DATA="printf "%\(_%d-%m-%Y_%H-%M\)T".txt"
DOWNLOAD() {
for ((x=1;x<=7;x++));do
wget --ftp-user=USER --ftp-password=PASSWORD ftp://DOMINIO/PASTA"$x"/SUB"$x"/SUBS_"$x"/arquivo"$x".txt
sleep 1
#AQUI SERA FEITA A COMPARAÇÃO
rename 's/(arquivo'$x')(\.txt)/$1'$($DATA)'/' *.txt
done
sleep 1800
DOWNLOAD
}
DOWNLOAD
A lógica é:
Inicia o laço (de 1 a 7), para cada unidade (da contagem), baixa o arquivo,
compara o atual com o anterior, a comparação só ocorrerá a partir do segundo ciclo, após o download dos 07 arquivos.
Se for diferente, altera o nome do atual para o padrão e remove o anterior,
senão, remove o atual(baixado), dá uma pausa de 1 minuto e reinicia.
Quando acabar o laço (chegar ao nº 7), aguarda 30 minutos e recomeça o processo ....
Estou desenvolvendo a parte para a comparação do arquivo.
Será comparado com o ultimo baixado . . .
Exemplo:
arquivo1_07-04-2016_18-29.txt com
arquivo1.txt
----------------------------------------------------------------------------------------
EDITADO em 08-04-2016 00:30h
FINALIZADO
----------------------------------------------------------------------------------------
#!/bin/bash
#######################
## marcelo oliver ##
## Abril/2016-Rev:01 ##
#######################
DATA="printf "%\(_%d-%m-%Y_%H-%M\)T".txt"
PAUSA() {
echo -e "\n O "$arqAtual" é igual ao "$ArqAnt".\n Dentro de 1 minuto o processo será reiniciado\n"
sleep 60
DOWNLOAD
}
DOWNLOAD() {
for ((x=1;x<=7;x++));do
wget --ftp-user=USER --ftp-password=PASSWORD ftp://DOMINIO/PASTA"$x"/SUB"$x"/SUBS_"$x"/arquivo"$x".txt
sleep 1
NumArq=$(ls -1 |egrep -c 'arquivo[1-7]_[0-9_-]{16}.txt')
if (("$NumArq" == "7"));then
ArqAnt=$(ls -1 |egrep -w 'arquivo'$x'_[0-9_-]{16}.txt')
MD5Ant=$(md5sum "$ArqAnt"|awk '{print $1}')
ArqAtual="arquivo$x.txt"
MD5Atual=$(md5sum "$ArqAtual"|awk '{print $1}')
[ "$MD5Atual" != "$MD5Ant" ] && OKAY || NOTOKAY
else
OKAY
fi
done
sleep 1800
DOWNLOAD
}
OKAY(){
rename 's/(arquivo'$x')(\.txt)/$1'$($DATA)'/' *.txt
rm "$ArqAnt"
}
NOTOKAY() {
rm "$ArqAtual"
PAUSA
}
DOWNLOAD
##FIM DO SCRIPT #######################################
----------------------------------------------------------------------------------------
Se a resposta for satisfatória, marque-a como a MELHOR, dessa forma, ganho uns pontos.
Isso incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo