2013-04-03 47 views
1

從shell使用curl,放棄(或檢測)由於發生超時而未完全下載的文件的最佳方法是什麼?我正在試圖做的是:curl from shell:如果傳輸超時丟棄輸出文件

curl -m 2 --compress -o "dest/#1" "http://url/{$list}" 

當超時發生時,日誌顯示它,這是下載保存到磁盤上的文件的一部分:

[4/13]: http://URL/123.jpg --> dest/123.jpg 
99 97984 99 97189 0  0 45469  0 0:00:02 0:00:02 --:--:-- 62500 
curl: (28) Operation timed out after 2000 milliseconds with 97189 bytes received 

我試圖擺脫未被100%下載的文件,或者讓他們列出以後嘗試恢復(-C標誌)。

+0

檢查退出代碼' $?'。如果不是零,則意味着錯誤。 – devnull

+0

我一次下載多個文件(以便它重新使用連接),並且它可以超時只有其中一個。我需要將退出代碼與正確的文件關聯起來。 – jvilhena

+0

難道你不能把'curl'放在'for'循環中,從而指示它一次獲取一個文件而不是傳遞一個URL列表?這將使您能夠檢查每個URL的返回碼。 – devnull

回答

1

到目前爲止,我已經找到了最好的解決辦法是捕捉捲曲通話的標準錯誤,並且用Perl和grep的組合解析它來獲得輸出文件名:

curl -m 2 -o "dest/#1" "http://url/{$list}" 2>curl.out 
perl -pe 's/[\t\n ]+/ /g ; s/--> /\n/g' curl.out | grep -i "Curl: (28)" | perl -pe 's/ .*//g'