Questão baixar uma série de arquivos automaticamente usando a linha de comando / wget


Eu tenho um caso que eu gostaria de acionar um download automático para uma lista de 114 arquivos (recitação) para cada leitor,
por exemplo, se eu quiser baixar as recitações para um leitor chamado abkr, os URLs dos arquivos serão parecidos com os seguintes

http://server6.mp3quran.net/abkr/001.mp3
http://server6.mp3quran.net/abkr/002.mp3
...
http://server6.mp3quran.net/abkr/113.mp3
http://server6.mp3quran.net/abkr/114.mp3

simplesmente estas são recitações do Alcorão, então elas sempre têm um total de 114

Existe uma maneira fácil de loop que usando command line em janelas ?


4


origem


Qual sistema operacional? - Indrek
O Windows é o preferido, o Mac também está bem. - Anas Nakawa


Respostas:


Por uma questão de integridade, aqui está uma solução somente em lotes:

@ECHO OFF
SetLocal EnableDelayedExpansion
FOR /L %%G IN (1, 1, 114) DO (
    SET num=%%G
    IF 1!num! LSS 100 SET num=0!num!
    IF 1!num! LSS 200 SET num=0!num!
    wget http://server6.mp3quran.net/abkr/!num!.mp3
)
EndLocal

Editar 1: Removido chaves desnecessárias.

Editar 2: Corrigido o valor inicial do contador para 1.


4



todas as soluções são ótimas, mas eu vou aceitar isso já que é direto (prompt de comando), e não requer algo diferente de wget. - Anas Nakawa
uma pequena correção, o loop começa a partir de 1 em vez de 0. - Anas Nakawa
Oops, corrigindo ... - zb226


Para uma solução do Windows, tente o seguinte script do PowerShell:

$Client = New-Object System.Net.WebClient
for ($i = 1; $i -le 144; $i++)
{
    $file = [string]::Format("{0:D3}.mp3", $i)
    $Client.DownloadFile("http://server6.mp3quran.net/abkr/" + $file, $file)
}

Primeiro cd no diretório que você deseja baixar os arquivos, é claro.


4





Você não declarou o SO, mas se você estiver usando o * nix e o Bash, o seguinte funciona:

wget http://server6.mp3quran.net/abkr/{001..114}.mp3

Uma solução que deve funcionar com qualquer shell:

#!/bin/sh
for i in $(seq -w 1 114); do
    printf 'http://server6.mp3quran.net/abkr/%s.mp3 ' $i
done | xargs wget

ou se seq não existe no sistema:

#!/bin/sh
i=1
MAX=114
while [ $i -le $MAX ]; do
    printf 'http://server6.mp3quran.net/abkr/%03d.mp3 ' $i
    i=$((i+1))
done | xargs wget

Basta copiar + colar no shell ou salvá-lo em um arquivo de script e executá-lo.


4



é Mac OSX incluído no seu *nix solução? - Anas Nakawa
anasnakawa: Sim, você pode executar o Bash no MacOSX, mas não é o shell padrão, acredito. Tente apenas executar o comando "bash"em um terminal. Você pode precisar instalá-lo antecipadamente, ou procurar por uma solução simples usando o shell padrão. Para esclarecer: o acima definitivamente funcionará, mas pode não ser a maneira mais óbvia se o Bash ainda não estiver instalado. - Daniel Andersson


Para referência e de completude uma versão sem seq, uma saída legal e continue se o download parar por qualquer motivo:

#!/bin/sh
for i in 00{1..9} 0{10..99} {100..144}
    printf 'http://server6.mp3quran.net/abkr/%s.mp3 ' $i
done | xargs wget -q --show-progress -c

0