Curvatura paralela com o nome do arquivo de entrada e saída no shell do Linux

1

Eu costumo baixar arquivos em paralelo com curl e urls em um arquivo como este:

cat links.txt | parallel --will-cite curl --connect-timeout 5 --max-time 10 --retry-max-time 40 --retry 5 --retry-delay 0 -s -f -O -C -

Onde links.txt tem um URL por linha.

Agora preciso atribuir um nome de arquivo personalizado a cada arquivo e não consigo descobrir como adicionar essa segunda entrada a curl through parallel . Entre outras coisas, tentei adicionar -o filename a cada linha de links.txt , mas não funcionou.

Atenciosamente,

    
por kurokirasama 14.11.2017 / 19:57

1 resposta

1

De acordo com man parallel , você pode usar alguns marcadores para ajudá-lo. Por exemplo, você pode reescrever seu código para:

parallel curl "${CURL_ARGS[@]}" -o '{#}'.curl_output '{}' :::: links.txt

onde ${CURL_ARGS[@]} são todos os seus argumentos para curl e links.txt tem um URL por linha. Este comando busca as URLs em links.txt e armazenará o resultado em um arquivo com o nome do número da tarefa em vez de executar curl (por exemplo, 10.curl_output ). Você teria que marchar o número do trabalho com URLs.

Outra abordagem seria chamar curl com -o '{}'._curl_output . Nesse caso, você teria que lidar com caracteres especiais em URLs ( / , por exemplo).

Além disso, você também pode dividir as colunas em links.txt , que contém um URL e um arquivo de saída por linha. Isso permitiria que você fizesse

parallel --colsep " " curl "${CURL_ARGS[@]}" -o '{1}' '{2}' :::: links.txt

O --colsep dividirá as linhas com base no delimitador provido como seu argumento ( " " neste caso).

    
por 15.11.2017 / 16:24