Como criar um canal infinito de strings no bash

2

Eu tenho cerca de 10 links no arquivo links.txt. Faço o download deles através de

cat links.txt | xargs -i --max-procs=4 bash -c "wget {}"

Eu gostaria de fazer isso repetidamente como

while :
do
   cat links.txt | xargs -i --max-procs=4 bash -c "wget {}"
done

Antes da próxima iteração do loop while, ele espera que todos os subprocessos sejam concluídos. Mas eu gostaria de continuar baixando (pegue url do começo do arquivo) quando houver um thread disponível. Como fazer isso? Pode ser que eu possa fazer um tubo infinito de cordas?

    
por Andrei N 25.04.2014 / 11:18

1 resposta

3

Se o seu yes aceitar um argumento de string:

yes links.txt | xargs cat | xargs -n1 --max-procs=4 wget

Não há sentido em executar um cat perl links.txt ou um bash por link (a menos que você queira que as linhas de links.txt sejam interpretadas como código de shell como http://$host$path ou http://evil;rm -rf / ).

Se o arquivo for pequeno o suficiente, você também pode fazer:

yes -- "$(cat links.txt)" | xargs -n1 -P4 wget
    
por 25.04.2014 / 14:57

Tags