Baixar arquivos de uma lista


130

Como posso baixar arquivos (listados em um arquivo de texto) usando wgetou de alguma outra maneira automática?

Lista de arquivos de amostra:

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf

Respostas:


227

O wget possui um sinalizador embutido para isso: wget -i your_list Você pode encontrar esse tipo de coisa lendoman wget


@aureianimus se eu quiser pular o link 2, então como?
Alhelal 22/11

Esta solução funcionou para mim. Fiquei feliz com o download sequencial e não em paralelo.
asiby

85

Coloque-os em paralelo com

cat urlfile | parallel --gnu "wget {}"

Por padrão, ele executará o maior número de processos que você tiver núcleos; provavelmente, você poderá aumentar esse número mais 10 vezes se realmente quiser reduzi-los rapidamente adicionando "-j 20" após paralelo.


1
Eu, pelo menos não consigo fazê-lo funcionar. Não vejo qualquer proc gerou, a mudança de eco para wget não faz nada de saída
Jakub Bochenski

Alguns ubuntus anteriores têm um defeito estúpido neste espaço: stackoverflow.com/questions/16448887/…
meawoppl

2
Observe com 'ele executará tantos processos quanto você tiver núcleos' - a largura de banda da rede provavelmente será mais um fator limitante.
21714 Wilf

2
Isso realmente depende. Para um grande número de arquivos pequenos, isso pode ser quase uma ordem de magnitude mais rápida, pois a maior parte do tempo de transferência é do handshake / TCP round trip. Também na situação em que você está baixando de um número de hosts menores, em algum momento a largura de banda por conexão é limitada, portanto, isso aumentará as coisas.
meawoppl

2
Isso é bastante útil se você deseja usar uma lista de URLs relativos (ID do recurso sem nomes de host) com nomes de host diferentes, por exemplo: cat urlfile | paralelo --gnu "wget example1.com {}" e urlfile gato | paralelo --gnu "wget example2.com {}"
Mauricio Sánchez


9

parallelpossui um sinalizador interno --arg-file( -a) que usará um arquivo de entrada como fonte, para que você possa evitar cat |. Você pode usar

parallel --gnu -a urlfile wget

Ou simplesmente parallel --gnu wget < urlfile


5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

onde list.txt é o seu arquivo de lista


4

Vi a resposta de Florian Diesch.

Eu consegui trabalhar incluindo o parâmetro bqcno comando.

xargs -i wget -bqc 'http://{}' < download.txt

Todos os downloads começaram em paralelo em segundo plano.

  • -b: Fundo. Ir para o plano de fundo imediatamente após o início
  • -q: Quieto. Desativar a saída do wget
  • -c: Continuar. Continue recebendo um arquivo parcialmente baixado

1

Arquivo de link links.txt

Comando para carregar todos os arquivos de links

cat links.txt | wget -i

3
Isso não funciona. wget -i links.txté o comando certo.
Hery

Não, este não é o comando certo. O comando certo é este: "cat links.txt | wget -i" #
DreamCoder

0

Acabei de testar isso:

xargs -a download_file -L1 wget

Funciona para mim. Os links dentro do arquivo txt devem estar em linhas separadas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.