4

假设我正在尝试有效地下载一组 50 个讲义。这些笔记prof位于大学网站的子目录中。第 45 篇讲义lect45以 pdf 格式在子目录中,标题为lect45.pdf. 我得到我的第一个pdf如下:

curl -O http://www.university.edu/~prof/lect1/lect1.pdf

如何使用 cURL 和 bash 有效地获取所有 50 条笔记?我试图从命令行执行此操作,而不是通过 Python / Ruby / Perl 脚本。我知道类似下面的内容会产生很多 404:

curl -O http://www.university.edu/~prof/lect{1..50}/lect{1..50}.pdf

那么什么会更好呢?我更喜欢优雅的单线而不是循环。

4

2 回答 2

6

在几个过程中进行:

for i in {1..50}
do
    curl -O http://www.university.edu/~prof/lect$i/lect$i.pdf &
done

或作为单线(只是不同的格式):

for i in {1..50}; do curl -O http://www.university.edu/~prof/lect$i/lect$i.pdf & done

&使得所有进程并行运行。

不要被输出吓到;shell 告诉你已经启动了 50 个进程,这是很多垃圾邮件。稍后它会告诉你他们终止的每一个。再次大量输出。

您可能不想并行运行所有 50 个 ;-)

编辑:

您使用{1..50}两次的示例制作了一个数字矩阵。例如echo {1..3}/{1..3},看看我的意思。我猜这样你会创建很多 404。

于 2013-07-03T12:21:50.827 回答
5

看看parallelshell工具。

因此,对于这种特殊情况,它看起来像

seq 50 | parallel curl -O http://www.university.edu/~prof/lect{}/lect{}.pdf 

至于curl- 它没有自己的并行机制,它实际上应该做什么?您的外壳扩展示例{1..50}对我来说似乎有效。

于 2013-07-03T12:24:14.790 回答