说我试图有效地下载一套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
那么什么会更好?我宁愿在一个循环中使用优雅的单线。
答案 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}
的示例似乎对我有用。