2013-07-03 25 views
4

假設我試圖有效地下載一組50個講義。這些註釋位於大學網站的prof子目錄中。第45次講義在lect45子目錄內,標題爲lect45.pdf。我得到我的第一個PDF如下:如何在一個命令中查看多個資源?

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

如何讓我的所有50個音符有效利用捲曲和bash?我試圖從命令行執行此操作,而不是通過Python/Ruby/Perl腳本執行此操作。我知道像下面的東西會產生大量的404s:

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

所以什麼會更好?我更喜歡一個循環中的優雅單線。

+0

'我知道像下面的東西不會工作'爲什麼?它會 – hek2mgl

+0

@ hek2mgl不會真的工作:數字不會真正同步。 –

+0

@gniourf_gniourf瞭解。但這是一個bash問題,而不是捲曲問題 – hek2mgl

回答

5

做到在幾個過程:

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個進程已經啓動,這是很多垃圾郵件。稍後它會告訴你他們每個人終止。大量的輸出。

你可能不希望並行;-)

EDIT運行所有50:

使用{1..50}你的榜樣兩次使數字矩陣。看例如echo {1..3}/{1..3}看看我的意思。我想這樣你創造了很多404s。

+0

我希望捲曲有它自己的,*更好*平行。 – hek2mgl

+0

你呢? 「做一件好事」 - Unix哲學。使用操作系統進行併發。你可能是對的,但我沒有發現。 – Alfe

+0

這不適用於此。重要的是文件將按照您通過命令行傳遞的順序依次輸出。 (像貓,這就是爲什麼名稱貓的網址,捲曲)。操作系統不會保證這一點..你的回答是錯誤的 – hek2mgl

4

看看parallel shell工具。

因此,對於這種特殊的情況下,它看起來像

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

至於curl - 它沒有自己的並行機制,以及它究竟應注意什麼?而你的例子與殼擴展{1..50}似乎對我有效。

+0

按照您通過命令行傳遞的順序,逐個輸出文檔很重要。 (像貓,這就是爲什麼名稱貓的網址,捲曲)。 'parallel'不能保證這個..你的回答根本就是錯誤的 – hek2mgl

+0

hek2mgl,在這裏也應用'-O'選項(因爲它已經來自原始問題),所以你的評論和我的答案一樣錯了。 – Alfe

+0

順便說一句,我喜歡'parallel',所以我可以upvote這個答案以及;-) – Alfe

相關問題