1

Я обычно скачиваю файлы параллельно с curl и urls в файл, подобный этому:

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 -

Где links.txt имеет один URL на строку.

Теперь мне нужно назначить собственное имя файла каждому файлу, и я не могу понять, как добавить этот второй вход для curl parallel . Среди прочего я попытался добавить -o filename в каждую строку файла links.txt но это не сработало.

С Уважением,

1 ответ1

1

По словам man parallel , вы можете использовать некоторые заполнители, чтобы помочь вам. Например, вы можете переписать свой код на:

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

где ${CURL_ARGS[@]} - это все ваши аргументы для curl а links.txt содержит один URL на строку. Эта команда извлекает URL-адреса из links.txt и сохраняет результат в файле, названном в соответствии с номером задания, чем выполняется curl (например, 10.curl_output). Вам нужно будет сопоставить номер задания с URL-адресами.

Другой подход заключается в вызове curl с -o '{}'._curl_output . В этом случае, вам придется иметь дело со специальными символами в URL / например).

Помимо них, вы также можете разделить столбцы в links.txt который содержит URL-адрес и выходной файл в каждой строке. Это позволит вам сделать

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

--colsep разделит линии на основе разделителей обеспечения в качестве аргумента (" " в данном случае).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .