如何在一个命令中卷曲多个资源?

时间:2013-07-03 12:17:26

标签: bash curl

说我试图有效地下载一套50个讲义。这些笔记位于大学网站的prof子目录中。第45讲的注释位于lect45子目录中,标题为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

那么什么会更好?我宁愿在一个循环中使用优雅的单线。

2 个答案:

答案 0 :(得分: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的方式。

答案 1 :(得分:5)

查看parallel shell工具。

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

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

至于curl - 它没有自己的并行机制,它究竟应该是什么?使用shell扩展{1..50}的示例似乎对我有用。