Usando o wget para obter nomes de arquivos de um arquivo de texto

3

Eu encontrei um site que hospeda alguns arquivos que estou procurando, há muitos para baixar todos eles individualmente. Os nomes dos arquivos têm uma forma razoavelmente padrão e reproduzível, ou seja, 1_a, 1_b, 1_c etc

Existe uma maneira, usando a linha de comando do Linux, de usar wget para automatizar o download de todos eles? Eu posso facilmente colocar os nomes de arquivos em um arquivo de texto de 1 entrada por linha e direcionar a linha de comando para procurar a partir daí, mas não seria a URL inteira, apenas o bit que muda para que o comando seja parecido com:

wget url.com/files/(bit from file).doc sourcefile.txt

Basicamente, é possível substituir uma entrada do arquivo de origem pelo bit entre colchetes.

Além disso, em um estágio, um grande pedaço (algumas centenas) dos arquivos são simplesmente numerados sequencialmente, então eu poderia usar um loop for para esse bit? Se sim, como eu faria isso sintaticamente na linha de comando?

    
por Luke Richards 19.07.2013 / 21:44

3 respostas

5

Você pode usar um loop:

for x in a b c d e f g h ; do
    wget http://url.com/$x.doc
done

que pode ser encurtado em bash para

for x in {a..h} ; do
    wget ...
done

Mas você pode usar essa abreviação, mesmo sem um loop for:

wget http://url.com/{a..h}.doc

Se os nomes não forem seqüenciais e você precisar lê-los de um arquivo, use um loop while:

while read x ; do
    wget http://url.com/$x.doc
done < sourcefile.txt
    
por 19.07.2013 / 21:52
3

Desde que você tenha criado o arquivo com URLs relativos, você pode fazer isso:

wget -i /path/to/file -B http://base_url_here

Portanto, por exemplo, se você quiser fazer o download de http://www.myfiles.com/*.txt , em que * pode ter muitas coisas diferentes, como a , a_1 , ... basta criar um arquivo com entradas

a.txt
a_1.txt
a_2.txt
...

e digite o comando:

wget -i /path/to/file -B http://www.myfiles.com

A opção -i instrui wget a ler seus links de um arquivo, e a opção -B instrui a prefixar o argumento fornecido como uma URL base para todos os links lidos no arquivo.

    
por 19.07.2013 / 21:56
1

Você pode usar httrack para baixar diretórios inteiros de arquivos (essencialmente espelhar tudo de um site) ou especificar para httrack um filtro junto com extensões de arquivo específicas, como o download apenas de arquivos .pdf .

Você pode ler mais sobre o recurso de filtro httrack que é o que você precisa usar se você estivesse interessado em baixar apenas arquivos que foram nomeados de uma maneira específica.

Aqui estão alguns exemplos do recurso de curinga:

  • *[file] ou *[name] - qualquer nome de arquivo ou nome, por exemplo não /,? e; caracteres
  • *[path] - qualquer caminho (e nome de arquivo), por exemplo não ? e; caracteres
  • *[a,z,e,r,t,y] - qualquer letra entre a, z, e, r, t, y
  • *[a-z] - qualquer letra
  • *[0-9,a,z,e,r,t,y] - quaisquer caracteres entre 0..9 e a, z, e, r, t, y

Exemplo

$ httrack http://url.com/files/ -* +1_[a-z].doc -O /dir/to/output

Os comutadores são os seguintes:

  • -* - remova tudo da lista de coisas para fazer o download
  • +1_[a-z].doc - faz o download de arquivos com o nome 1_a.doc, 1_b.doc, etc.
  • -O /dir/to/output - escreve os resultados aqui
por 19.07.2013 / 22:34

Tags