Script para download via FTP

1. Script para download via FTP

Guilherme Sanches
gsanches

(usa Ubuntu)

Enviado em 07/04/2016 - 12:20h

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 diretorio qualquer, porem a duvida...

Esses arquivos nao possuem parametro 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 modificacao.

Apos baixar, os mesmos devem ser renomeados no diretorio destino conforme exemplo:

arquivo1_dd/mm/yyyy hh:mm.txt


Podem me ajudar?


  


2. Re: Script para download via FTP

Patrick Costa da Silva
patrickpcs

(usa Nenhuma)

Enviado em 07/04/2016 - 12:40h

Estude os seguintes comandos....
ftp
wget
sleep
mv
cp
test
sed
grep

Qual sua dificuldade? Lógica de programação ou Sintaxe de uma linguagem?


http://goo.gl/g6NiFp


3. Resposta

Guilherme Sanches
gsanches

(usa Ubuntu)

Enviado em 07/04/2016 - 12:42h

Seria na montagem do scipt para automatizar essa tarefa, no caso a logica.


4. Re: Script para download via FTP

Daniel Miranda Timbó Mendes
danielmirandatm

(usa Ubuntu)

Enviado em 07/04/2016 - 13:40h

Cara, no caso para automatizar o script, a melhor forma é utilizar o expect. Estude scripts com expect.

No caso de data e hora de modificação dos arquivos, utilize o comando

$ ls -l [nome_do_arquivo]

Então utilize alguma forma de tratar a saída deste comando. Para isso pode utilizar os comandos awk, cut...

Estude estas ferramentas, você encontrará a melhor forma de criar o script.




5. Re: Script para download via FTP

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 07/04/2016 - 14:43h

Baixe os arquivos como pretende e capture a data de modificação. Em seguida mova o arquivo já com os parâmetros de data resolvidos. Se realmente tiver importância comparar conteúdo, sugiro utilizar md5 ou sha (melhor). Daí é só estudar os comandos já sugeridos pelos colegas aqui. Se enroscar, manda a parte relevante explicando o que houve.



6. Re: Script para download via FTP

Renan Arantes
R3nan

(usa Debian)

Enviado em 07/04/2016 - 14:47h

pra te ajudar um pouco, comece buscando o arquivo no servidor ftp com o comando:
wget --user=NAME --password='PASSWORD' ftp://url/path/file.name 

renomei o arquivo antigo, de um nome para o arquivo novo, verifique se eles sao iguais, caso seja apague o arquivo que acabou de salvar caso não mantenha-o


7. Re: Script para download via FTP

Marcelo Oliver
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








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts