De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários