Scripts com wget – Monolito Nimbus
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:
"Parse error—for instance"
Erro de I/O no arquivo
Falha na verificação do certificado SSL
Falha na autenticação (usuário e/ou senha)
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
## Script para baixar arquivo mais recente
base_url="https://www.site.org.br/publicacao"
# 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
echo "Status de" $data_link ":" $status
# Se tiver o arquivo, baixar e sair do programa
wget -nv -P temp $data_link
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.
Exibir e somar o tempo de arquivos de vídeo e som Inserir arquivos CSV no banco de dados Scripts para verificação de arquivos Exemplos de scripts para reorganizar dados