Como posso escrever o URL e o status HTTP relacionado do url em outro arquivo?

1

Eu tenho um arquivo contendo o URL dos sites. Eu estou tentando escrever um script bash que terá qualquer arquivo contendo URL e gravar em outro arquivo - o URL eo código de status relacionado.
O que estou tentando alcançar está aqui:
Eu tenho URL em um arquivo como:

http://google.com
http://trafficinviter.com
http://stackoverflow.com   
............
............
Upto 30 crore lines of URL in a file.   

Estou usando o comando cURL para obter o status Http dessas URLs.
Portanto, não estou entendendo como posso obter o URL e o status HTTP correspondente desse URL.
Digamos que eu precise ter a saída em um arquivo como este:

    http://google.com
    200 ok    
    http://trafficinviter.com
    200 ok
    http://stackoverflow.com   
    200 ok
    http://example.com
    404 
    ............
    ............
    Upto 30 crore lines of URL in a file. 

Também estou à procura de uma festa que faça o meu trabalho em um instante e com facilidade. Como existem muitas linhas, não consigo encontrar uma solução adequada para isso. Gentilmente, me ajude. Muito obrigado.

    
por Jaffer Wilson 04.01.2017 / 07:50

2 respostas

3

Tente:

while read url
do
    echo "$url"
    curl -sI "$url" | head -1
done < list-of-urls > output-file

Isso apenas lê cada linha de entrada do arquivo list-of-urls , retorna-a e obtém a primeira linha de saída de curl -I nessa URL (que é o status da resposta HTTP). A saída do loop inteiro vai para output-file .

Para testar vários URLs de uma vez, use paralelo GNU :

GNU parallel makes sure output from the commands is the same output as
you would get had you run the commands sequentially. This makes it
possible to use output from GNU parallel as input for other programs.

Por exemplo:

parallel -a list-of-urls 'echo {}; curl -sI {} | head -1' > output-file

Não há garantias de que a saída esteja em ordem, no entanto:

$ cat output-file
http://example.com
HTTP/1.1 200 OK
http://google.com
HTTP/1.1 302 Moved Temporarily
http://stackoverflow.com
HTTP/1.1 200 OK
http://trafficinviter.com
HTTP/1.1 200 OK
    
por muru 04.01.2017 / 07:58
0

Com o GNU Parallel você faria algo como:

cat input | parallel -k -j 100 --tag 'curl -sI {} | head -1'
    
por Ole Tange 04.01.2017 / 19:13