首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个可以打开多个终端并在每个终端中运行wget的Bash脚本

创建一个可以打开多个终端并在每个终端中运行wget的Bash脚本
EN

Stack Overflow用户
提问于 2020-03-04 12:02:42
回答 3查看 77关注 0票数 0

我必须使用以下脚本从数据库中下载超过100,000个文档:

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

第一次下载所有文件(都在8KB以下)花了一周多的时间,所以我尝试打开多个终端并运行total.txt的拆分(10个相等的拆分,10个终端中的10000个文件),在短短14个小时内我下载了所有的文件,有没有办法让脚本为我做到这一点?

这是该列表的示例:

代码语言:javascript
复制
D7E6X7
A0A1L9C3F2
A3K3R8
W0K0I7
EN

回答 3

Stack Overflow用户

发布于 2020-03-04 13:04:48

gnome-terminal -e命令或xterm -e命令或konsole -e命令或terminal -e命令

票数 1
EN

Stack Overflow用户

发布于 2020-03-04 12:24:57

还有另一种方法可以让它变得更快。

现在你的下载是同步的,也就是说,下一个下载过程直到当前下载完成才会开始。

搜索如何在unix上使命令异步/在后台运行。

票数 0
EN

Stack Overflow用户

发布于 2020-03-04 17:26:16

当您手动执行此操作时,打开多个终端是有意义的。如果要编写脚本,可以从一个终端/脚本运行多个进程。您可以使用xargs同时启动多个进程:

代码语言:javascript
复制
xargs -a list.txt -n 1 -P 8 -I @ bash -c "wget https://www.uniprot.org/uniprot/@.txt"

其中:

  • -a list.txt告诉xargs使用list.txt文件,因为input.
  • -n 1告诉xargs为每个命令使用最多一个参数(来自输入)它runs.
  • -P 8告诉xargs一次运行8个命令,您可以更改它以适应您的system/requirements.
  • -I @告诉xargs使用"@“来表示输入(即文件中的行)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60518899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档