Я использую cURL, чтобы загрузить много файлов и объединить их в STDOUT. Около 100 000 маленьких файлов. Я хотел бы видеть прогресс против 100 000. Это возможно с помощью curl или с помощью curl в xargs?

Интересуют только стандартные решения командной строки.

2 ответа2

1

Здесь вы можете сделать несколько разных вещей: но, не зная точно вашей методологии завивки, я могу просто предложить несколько предложений.

Сделайте итеративный подсчет для цикла:

for file {1..100000}; do echo "downloading: $file" >&2 ; curl [whatever] ; done Это перенаправит «download: $ file» на STDERR, поэтому, если вы используете перенаправление на STDOUT, это не испортит его, но вы все равно сможете увидеть его на экране

for file {1..100000}; do echo "downloading: $file" >> progress.out ; curl [whatever] ; done Это записывает прогресс в файл, чтобы он вообще не отображался на экране, тогда вы можете просто указать -f progress.out

Если ваш завиток не является итеративным:

терминал 1:curl [whatever] | tee progress.out

терминал 2:watch -n5 "grep -c '[unique file delimiter]' progress.out"

tee записывает копию STDOUT в файл, и вы учитываете что-то, что появляется только один раз для HTML-документа ... может быть, <HEAD> или <HTML> или что-то еще. Часы будут запускать grep каждые 5 секунд, чтобы узнать, сколько вы выполнили.

0

В наши дни GNU Parallel более или менее стандартен:

cat urls | parallel -j30 --eta curl ... > out

Дополнительное преимущество: несколько завитков будут выполняться параллельно.

Посмотрите вступительные видео, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

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