cURL - faz o download de vários arquivos e especifica nomes de saída

1

Eu tenho uma lista de URLs com intervalo em {} . Eu posso baixá-los com cURL no bash, mas o problema é a saída. Eu posso usar # 1, mas eu preciso ter arquivos nomeados com nomes diferentes (eu armazenei esses nomes na matriz). Como pode alterar nomes de saída para vários arquivos?

Eu tentei baixar arquivo por arquivo, mas isso é cerca de 40% mais lento do que vários downloads.

    
por Peter 06.09.2014 / 17:10

1 resposta

1

Você pode fazer iterações em dois arrays, um com seus URLs para download e outro com os nomes de arquivos desejados, iniciando subprocessos que serão executados em paralelo para o download dos arquivos.

#!/bin/sh

# array of URLs
urls=( http://www.example.com/file1.zip http://www.example.com/file2.zip http://www.example.com/file3.zip )
# names of downloaded files
names=( myname1.zip myname2.zip myname3.zip )

for ((i = 0; i < ${#urls[@]}; ++i)); do
    printf "Launching subprocess to DL %s to %s\n" "${urls[i]}" "${names[i]}"
    curl -s -o "${names[i]}" "${urls[i]}" &
done

Ou tente algo assim se quiser que seja semelhante ao uso de {} w / curl:

#!/bin/sh

# desired filenames
names=( myname0.zip myname1.zip myname2.zip )

for (( i = 0; i < ${#names[@]}; ++i )); do
  printf "Launching subprocess to DL http://example.com/file%s.zip to %s\n" "$i" "${names[i]}"
  curl -s -o "${names[i]}" http://example.com/file"$i".zip &
done
    
por 06.09.2014 / 17:52

Tags