Digamos que eu tenho um arquivo com o seguinte
bob
john
sue
Ora, estes diretamente corrospond (neste caso) padrão de URL, como http://example.com/persons/bob.tar
, john.tar
, sue.tar
.
Eu gostaria de pegar essas linhas e executá-las xargs
. Não sei o que é passado para o comando sendo executado. Como acesso o parâmetro no prompt (digamos que eu queira simplesmente repetir cada linha como cat file | xargs echo $PARAM
) ou em um script bash.
xargs
ela a divide por linha e alimenta cada linha em um comando, certo? Como faço para acessar isso se precisar dizer algo comocat file | xargs curl http://example.com/[PASSED FROM FILE].tar
?Respostas:
A resposta de Michael está certa e deve resolver o seu problema. Corrida
fará o download dos arquivos
bob.tar
john.tar.
sue.tar
conforme o esperado.MAS : gato aqui é inútil
prefiro usar:
fonte
cat xaa xab xac xad ... xargs ...
cat
é bom realmente, assim como para adicionar mais informações ... :)xargs -I % curl …
( opção xargs anteriorcurl
e suas opções / argumentos). No mínimoxargs curl -I %
(onde-I %
deve ser uma opção para xargs , não enrolar ) não é portátil.Eu acho que você está perguntando como inserir as linhas individuais extraídas de
xargs
'stdin no meio de um comando, em vez de apenas colar no final sempre. Nesse caso, a-I
bandeira aceita umreplacement-string
argumento;xargs
substituiráreplacement-string
no comando a linha lida de stdin:fonte
curl http://example.com/foobar.tar > foobar.tar
?>
é um shell constrói, e não vai funcionarxargs
. Por outro lado,curl -o
gravará em um arquivo nomeado em vez de stdout, como o quewget
faz, então é provavelmente o que você gostaria de usar aqui.Você pode querer set
--delimiter=
/-d
a'\n'
bem.Por outro lado, se você está apenas tentando transformar cada linha do arquivo em um URL,
vai fazer, e se você quiser buscar todos eles, basta inseri-lo .
| wget -i
fonte
outra maneira com o loop de shell:
você também pode executar cada iteração em segundo plano anexando
&
antes do último ponto e vírgula - para downloads muito grandes, isso pode ser útilfonte
while IFS= read i ; do curl ... ; done < file
Com o GNU Parallel, você pode:
Ou:
Assista ao vídeo de introdução do GNU Parallel para saber mais: http://www.youtube.com/watch?v=OpaiGYxkSuQ
fonte
while read VAR; do ... done
loop é simples, mas muito versátil:fonte
Esta é uma versão mais geral da resposta de Stefan: s, mas estou usando o awk no meio para preparar a "string" exata que eu gostaria que o xargs execute. E então o xargs está usando o bash para fazer o "trabalho" real.
É um pouco exagerado para este exemplo, mas é uma solução geral que, com algumas modificações, pode resolver muitos problemas ...
fonte