запускаю одну и ту же команду для нескольких ссылок в терминале

Один небольшой трюк заключается в использовании относительных номеров строк. Например:

:+0,+99w filename

записывает следующие 100 строк в имя файла .

2
13.12.2019, 00:00
3 ответа

Вы можете использовать параллели GNU:

parallel --retries 5 -j4 -a file.txt wget {}

Будет выполняться 4 задания одновременно и считываться ввод из file.txt. В случае сбоя задания оно будет повторено до 20 раз, прежде чем перейти к следующему заданию.

5
27.01.2020, 21:51

С xargs, который реализует опцию -Pдля поддержки параллельного выполнения нескольких заданий (, наиболее распространенные реализации делают):

xargs -I {} -P 4 wget --quiet {} <file.txt

Делаем это безxargsили GNU parallel, но с использованиемbash:

#!/bin/bash

jobs=0
while read -r url; do
    if [ "$jobs" -ge 4 ]; then
        wait -n
        jobs=$(( jobs - 1 ))
    fi

    wget --quiet "$url" &
    jobs=$(( jobs + 1 ))
done <file.txt

wait

Это запускает wgetфоновые задачи настолько быстро, насколько это возможно, пока не будет запущено четыре таких задания. Затем он ждет, пока любой из них не закончится на wait -n, прежде чем начать следующий. Переменная jobsсодержит количество текущих wgetзаданий.

В конце одиночный вызов waitбудет заблокирован до завершения всех заданий.

Именно wait -nделает этот скрипт bash, а не простой /bin/shскрипт.

2
27.01.2020, 21:51

Хотя все ответы с использованием parallelи xargsработают нормально, позвольте представить вам GNU Wget2. Это следующая версия Wget, и хотя она все еще находится в альфа-режиме -, она представляет собой замену -для большинства применений Wget.

Wget2 поддерживает многопоточные загрузки, так что вы можете просто передать ему файл и сколько загрузок вы хотите параллельно, пусть Wget2 сделает все остальное за вас.

Источник :Am сопровождающий как для GNU Wget, так и для GNU Wget2

0
27.01.2020, 21:51

Теги

Похожие вопросы