você está aqui: Home  → Arquivo de Mensagens

Script para download de arquivos

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 16 de fevereiro de 2018

A CBN costumava publicar as gravações de seus programas na web, em um formato que obedecia a uma sintaxe, com o seguinte formato:

coluna_AAMMDD.mp3 max_041102.mp3 

Por exemplo, os podcasts do Max Gehringer tinham o formato max_041102.mp3.

Para baixar todos os podcasts do Max Gehringer, desde o começo de sua coluna na CBN, eu teria que fazer um script que fosse alterando o valor do ano, do mes e do dia. Para isto, posso criar três laços, um dentro do outro:

Supondo que a coluna do Max Gehringer tenha começado em 2004, para baixar todos os podcasts até o ano de 2017, podemos fazer da seguinte forma:

#!/bin/bash

for A in {04..17}
do
  for M in {01..12}
  do
      for D in {01..31}
      do
         wget http://www.cbn.com.br/podcasts/max_$A$M$D.mp3
         sleep 10
      done
  done
done

O laço mais externo, que gera o ano, roda mais devagar, ou seja, para cada valor da variável $A, a variável $M varia de 1 a 12, e para cada valor de $M a variável $D varia de 1 a 31. São três relógios, o mais externo (o ano) roda mais devagar, o do meio (o mês) roda um pouco mais rápido e o mais interno (o dia) roda mais rápido do que todos os outros.

Infelizmente a CBN mudou o esquema de armazenamento de seus podcasts e este script não funciona mais, entretanto, continua sendo um bom exemplo de laços aninhados.

Para a CBN não pensar que está sofrendo um ataque de negação de serviço, podemos fazer com que o sistema execute uma pausa ao final de cada download. Para isto inserimos o comando sleep 10 para fazer com que entre um download e outro o sistema faça uma pausa de 10 segundos.

É claro que nem todos os arquivos que eu solicitar existirão, mas neste caso ocorrerá apenas uma mensagem de erro sobre a qual não preciso tomar nenhuma atitude. Este script também não trata meses com duração diferente de 31 dias, que também julguei não ser preciso. Todavia, existem situações em que um tratamento completo precisa ser inserido na Shell.

Como não podia deixar de ser, também dá para fazer tudo em uma linha:

echo {15..17}{01..12}{01..31} | \
	 tr ' ' '\n' | \
         xargs -i wget http://www.cbn.com.br/podcasts/max_{}.mp3

Faça um teste e veja como funciona bem. A mágica do xargs é um brinde do Julio Neves para a Dicas-L.



Veja a relação completa dos artigos de Rubens Queiroz de Almeida