Pular para o conteúdo

Retorno do FTP

Responder tópico
  • Denunciar
  • Indicar

1. Retorno do FTP

Enviado em 02/04/2013 - 20:33h

Boa noite pessoal, estou estudando Script Shell, com base nos livros:

PROGRAMAÇÃO SHELL LINUX - Julio Cezar Neves
UM GUIA PRATICO LINUX DE COMANDOS, EDITORES E PROGRAMAÇÃO DE SHELL - Mark G. Sobell

e estou criando um script para buscar alguns arquivos em um FTP, e assim que for executando o Script, esse vai salvando em um log os resultados do processamento. Veja como está ficando:

#!/bin/bash


#--------PREPARA DIRETÓRIO TEMPORÁRIO-------#
echo processo de backup iniciado em `date +%d/%m/%Y` as `date +%H:%M` h. | tee -a >/home/user/Script/logbkpftp
cd /tmp
mkdir bkp 2> /dev/null
cd bkp
#-------------------------------------------#



#-------PREPARA DATA DE REFERÊNCIA----------#

datref=`date +%Y%m%d -d "10 days ago"`

#-------------------------------------------#

#------ACESSA FTP E BUSCA ARQUIVOS----------#


ftp -in <<EOF
open xxx.xxx.xxx.xxx
user xxxxx xxxxxx

cd /Cadastro
mget "$datref"*.txt
bye

EOF
#------------------------------------------#

e nessa ultima parte "ACESSA FTP E BUSCA ARQUIVOS", gostaria de fazer uma verificação se conectou ou não para enviar isso ao log, como posso fazer? Não sei como testar se conectou ou não.

Responder tópico

2. Re: Retorno do FTP

Enviado em 03/04/2013 - 11:17h

O cliente tradicional de FTP não é muito "scriptável". Você poderia usar outro cliente que fosse mais adequado para isso.

Uma sugestão que eu faço é que você use o programa curl.

3. res>res

Enviado em 03/04/2013 - 13:22h

Paulo, boa tarde

tentei usar o curl para realizar um teste, mas não consegui...

preciso acessar um diretório dentro do FTP chamado cadastro, então usei a seguinte sintaxe para testar:

$curl ftp://xxx.xxx.xxx.xxx/Cadastro --user login:senha

e obtive o erro: curl: (78) RETR response: 550


mas mesmo utilizando o curl ou ftp, como posso testar se a conexão foi estabelecida com sucesso?

preciso de algo assim:

se (conexao estabelecida)
{
escreve: "conexão FTP estabelecida com sucesso"
}
senao
{
escreve: "conexão FTP falhou"
}

4. Re: Retorno do FTP

Enviado em 03/04/2013 - 17:37h

Insisto que você pode usar o curl, que foi feito justaemnte pare ser usado com scripts.

Ao contrário, porém, de um progarma de FTP tradicional, o curl não mantém sessões abertas. Cada execução tem uma sessão distinta de transferência de dados, e cada uma delas informa se a transferência foi bem sucedida por meio do código de terminação da execução (como sempre, o código zero significa sucesso, e as várias condições de erro retornam diferentes valores, segundo a manpage do programa).

Para obter uma lista de arquivos remotos e fazer o download de um desses arquivos listados, poder-se-ia fazer algo parecido com o que vai abaixo (não testado).

BASEURL=ftp://some.host/some_dir
DESIRED_DATE=`date "+%Y%m%d"`

exec 3< <(curl -l "$BASEURL/" | sed 'alguma expressao de filtragem')

while read file <&3; do
if [[ ${file/*-${DESIRED_DATE}-*.tar.gz/found} = found ]]; then
# O arquivo atende ao padrão. Faz o seu download;
if curl "$BASEURL/$file" -o $file; then
echo "Arquivo $file transferido com sucesso.
else
echo "Falha $! ao transferir arquivo $file." >&2
fi
fi
done

exec 3<&-

5. Re: Retorno do FTP

Enviado em 04/04/2013 - 14:04h

paulo1205 escreveu:

Insisto que você pode usar o curl, que foi feito justaemnte pare ser usado com scripts.

Ao contrário, porém, de um progarma de FTP tradicional, o curl não mantém sessões abertas. Cada execução tem uma sessão distinta de transferência de dados, e cada uma delas informa se a transferência foi bem sucedida por meio do código de terminação da execução (como sempre, o código zero significa sucesso, e as várias condições de erro retornam diferentes valores, segundo a manpage do programa).

Para obter uma lista de arquivos remotos e fazer o download de um desses arquivos listados, poder-se-ia fazer algo parecido com o que vai abaixo (não testado).

BASEURL=ftp://some.host/some_dir
DESIRED_DATE=`date "+%Y%m%d"`

exec 3< <(curl -l "$BASEURL/" | sed 'alguma expressao de filtragem')

while read file <&3; do
if [[ ${file/*-${DESIRED_DATE}-*.tar.gz/found} = found ]]; then
# O arquivo atende ao padrão. Faz o seu download;
if curl "$BASEURL/$file" -o $file; then
echo "Arquivo $file transferido com sucesso.
else
echo "Falha $! ao transferir arquivo $file." >&2
fi
fi
done

exec 3<&-
Paulo obrigado pela ajuda mais ainda não tenho conhecimento suficiente para interpretar seu código, mas agradeço sua atenção e ajuda, e vou estudar o código para enteder...




Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder