1 votos

En paralelo curl con entrada de archivo y nombre de archivo de salida en el shell de Linux

Yo normalmente descarga de archivos en paralelo con curl y las direcciones url de un archivo 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 -

Donde links.txt tiene una url por línea.

Ahora tengo que asignar un nombre de archivo personalizado para cada archivo y no puedo entender cómo agregar esta segunda entrada a curl comedero parallel. Entre otras cosas, he intentado añadir -o filename a cada línea de links.txt pero no funcionó.

Saludos,

1voto

arielnmz Puntos 253

De acuerdo a man parallel, puede utilizar algunos marcadores de posición para ayudar a usted. Por ejemplo, se puede reescribir el código para:

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

donde ${CURL_ARGS[@]} son todos tus argumentos a curl y links.txt tiene una URL por línea. Este comando recuperar la Url en links.txt y almacenar el resultado en un archivo llamado después de que el número de la tarea de ejecutar curl (por ejemplo, 10.curl_output). Usted tendrá que vérselas número de puestos de trabajo con las direcciones Url.

Otro enfoque sería la llamada a la curl con -o '{}'._curl_output. En este caso, usted tendrá que lidiar con los caracteres especiales en las direcciones Url (/, por ejemplo).

Además de aquellos, también se podría dividir las columnas en un links.txt que contiene una URL y un archivo de salida por línea. Esto le permitiría hacer

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

El --colsep va a dividir las líneas basadas en el delimitador de ofrecer, como su argumento (" " en este caso).

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: