Создание Bash скрипта, который может открывать несколько терминалов и запускать wget в каждом - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно загрузить из банка данных более 100 000 документов, используя этот сценарий:

#!/usr/bin/bash
IFS=$'\n'       
set -f          
for line in $(cat < "$1")
do
  wget https://www.uniprot.org/uniprot/${line}.txt
done

Первый раз, когда за неделю загрузились все файлы (все по 8 КБ), поэтому я попытался открыть несколько терминалов и выполнение разделения total.txt (10 равных разделений по 10000 файлов в 10 терминалах), и всего за 14 часов у меня были загружены все документы, есть ли способ сделать скрипт для меня?

это пример того, как выглядит список:

D7E6X7
A0A1L9C3F2
A3K3R8
W0K0I7

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Команда gnome-терминал -e или команда xterm -e или команда konsole -e Или команда терминала -e

0 голосов
/ 04 марта 2020

Когда вы делали это вручную, открытие нескольких терминалов имело смысл. Если вы хотите написать скрипт, вы можете запустить несколько процессов из одного терминала / скрипта. Вы можете использовать xargs для одновременного запуска нескольких процессов:

xargs -a list.txt -n 1 -P 8 -I @ bash -c "wget https://www.uniprot.org/uniprot/@.txt"

Где:

  • -a list.txt указывает xargs использовать файл list.txt в качестве входных данных .
  • -n 1 указывает xargs использовать максимум один аргумент (из входных данных) для каждой команды, которую он запускает.
  • -P 8 говорит xargs запускать 8 команд одновременно, вы может изменить это в соответствии с вашей системой / требованиями.
  • -I @ говорит xargs использовать «@» для представления ввода (то есть строки из вашего файла).
0 голосов
/ 04 марта 2020

Существует еще одна альтернатива, позволяющая сделать это быстрее.

В данный момент ваши загрузки синхронизированы, т.е. следующий процесс загрузки не начинается до тех пор, пока не закончится текущий.

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

...