Retorno do FTP

1. Retorno do FTP

Roberto dos Santos
kritikals

(usa Fedora)

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.


  


2. Re: Retorno do FTP

Paulo
paulo1205

(usa Ubuntu)

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

Roberto dos Santos
kritikals

(usa Fedora)

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

Paulo
paulo1205

(usa Ubuntu)

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

Roberto dos Santos
kritikals

(usa Fedora)

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...










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts