Lote carregando arquivos com a data no nome do arquivo

1

Eu gostaria de escrever um script Linux para baixar uma imagem de um site, com datas diferentes. Eu suponho que eu preciso de três loops para o AA, MM e DD. AA deve ser 1974-2017, MM 01-12 e DD 01-31. Como se parece em um pequeno script bash do Linux?

    
por István Radics 16.11.2017 / 09:13

1 resposta

6

Suponho que um dos seus arquivos seja https://www.url.com/2017-11-16.png e apenas a data seja alterada. Você poderia usar Bash Brace Expansion para calcular as datas e baixar os arquivos em uma corrida:

wget https://www.url.com/{2016..2017}-{01..02}-{01..02}.png

No entanto, isso não funcionará para muito muitos URLs, como no seu caso, porque há um limite para o tamanho de um comando do terminal. Uma alternativa é um loop for :

for i in {2016..2017}-{01..02}-{01..02}; do
  wget https://www.url.com/$i.png
done

Mas você ainda receberá datas como 2017-02-31 com essa abordagem. Para obter apenas datas reais , precisamos de date como neste script tirado de aqui :

#!/bin/bash
startdate=2017-11-14
enddate=2017-11-16
d=
n=0
until [ "$d" = "$enddate" ]; do  
  d=$(date -d "$startdate + $n days" +%Y-%m-%d)
  wget https://www.url.com/$d.png
  ((n++))
done

Ajuste startdate e enddate para suas necessidades exatas. Se você precisar alterar o formato de data para, por exemplo, 20171116 , faça isso em ambas as variáveis e o comando date , neste exemplo seria +%Y%m%d .

    
por dessert 16.11.2017 / 09:28