Scripts com wget

O GNU Wget é um utilitário gratuito para download não-interativo de arquivos da Web (via HTTP, HTTPS ou mesmo FTP). É um comando muito útil para quem deseja baixar várias páginas de uma vez só, por exemplo, justamente pela possibilidade de eliminar o ser humano e automatizar tarefas. Veja alguns parâmetros muito utilizados em conjunto com o comando “wget”:

  • -c – continua de onde parar, caso a conexão seja interrompida
  • -r – recursividade
  • -np – não recria todo o caminho do arquivo (o que acontece ao usar recursividade)
  • -nv – só imprime dizendo quando o arquivo foi baixado com sucesso
  • -q – sem saída de texto
  • -O – define o nome do arquivo baixado
  • -P ‘path’ – definir o diretório (path) onde serão baixados os arquivos
  • -i ‘lista.txt’ – baixa os arquivos que constam de uma lista
  • -A ‘*.x’ – baixa somente os arquivos com a extensão especificada
  • –level=depth – permite especificar um nível máximo de subdiretórios
  • –no-check-certificate – sem checar certificado SSL
  • –spider – não baixa as páginas, somente verifica se estão lá

O wget pode retornar um código de status da conexão:

  1. Sem problemas
  2. Erro genérico
  3. “Parse error—for instance”
  4. Erro de I/O no arquivo
  5. Falha na rede
  6. Falha na verificação do certificado SSL
  7. Falha na autenticação (usuário e/ou senha)
  8. Erro de protocolo
  9. Servidor enviou uma resposta de erro

Baixar um diretório usando wget

Na verdade, o HTTP não tem uma real noção de diretórios. Mesmo assim, existem algumas opções do comando wget que permitem baixar somente a partir de um nível:

wget --user=NOME_USUARIO --password='SENHA' -A ".gz" -c -r -np -nH --cut-dirs=1 http://www.exemplo.com.br/dir/sub_dir/

Os parâmetros adicionais “-nH” indicam para não criar uma pasta com o nome do domínio (“www.exemplo.com.br”), enquanto que “–cut-dirs=1” informa para não criar diretórios 1 nível acima (“dir”). Somente será criada um dirétório de nome “sub_dir” com todos os sub-diretórios e arquivos cujo nome termine com “.gz”.

Verificação da validade de vários links

O script a seguir cria uma série de strings dentro de um loop, cada uma sendo a URL de um arquivo cujo caminho e o nome variam conforme a data que foram gerados. o comando wget verifica se existe o arquivo dessa URL: se existir, ele baixa o arquivo e encerra o programa; caso não exista, ele gera uma nova data para o dia anterior e repete a verificação. São verificadas as datas de um a cinco dias atrás.

#!/bin/bash
## Script para baixar arquivo mais recente

base_url="https://www.site.org.br/publicacao"

for n in {1..5}; do
	# Montar url do arquivo
	ano=$(date --date="$n days ago" +%Y)
	mes_digito=$(date --date="$n days ago" +%m)
	mes_nome=$(date --date="$n days ago" +%B)
	mes=$mes_digito'_'$mes_nome
	dia=$(date --date="$n days ago" +%d-%m-%y)
	data_link=$base_url'/'$ano'/'$mes'/'$dia'.pdf'
	
	# Verificar se link está ativo
	wget -q --spider $data_link
	status=`echo $?`
	echo "Status de" $data_link ":" $status
	
	# Se tiver o arquivo, baixar e sair do programa
	if [ "$status" -eq "0" ]; then
		wget -nv -P temp $data_link
		break
	fi
done

Veja mais sobre o Wget na documentação do GNU e sobre outros comandos de rede no post Comandos de rede Linux. Sobre o comando “date”, veja o post Calendários e o comando date.

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.