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
Sourav
fonte

Respostas:

227

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

aureianimus
fonte
@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.

meawoppl
fonte
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
10
xargs -i wget 'http://{}'  < your_list
Florian Diesch
fonte
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

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

onde list.txt é o seu arquivo de lista

flo
fonte
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
vida de rua
fonte
1

Arquivo de link links.txt

Comando para carregar todos os arquivos de links

cat links.txt | wget -i
DreamCoder
fonte
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.

Kyle Felipe
fonte