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:
- Sem problemas
- Erro genérico
- “Parse error—for instance”
- Erro de I/O no arquivo
- Falha na rede
- Falha na verificação do certificado SSL
- Falha na autenticação (usuário e/ou senha)
- Erro de protocolo
- 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