2012-08-08 58 views

回答

17

你可以只是把你的電話給curlif塊中:

if ! [ -f /home/$outputfile ]; then 
    curl -o /home/$outputfile "url" 
fi 

另外請注意,在你的榜樣,你有$url單引號內,它不會做你想做的。比較:

echo '$HOME' 

要:

echo "$HOME" 

此外,curl--silent選項,可以在腳本中非常有用。

+0

非常有幫助,謝謝你指出。但我通過PHP這樣做,我如何運行,如果通過PHP語句? – thevoipman 2012-08-08 06:14:21

+0

我不知道我的頭頂PHP,但我相信它有一個相對簡單的機制來查看文件是否存在。 – 2012-08-09 14:07:20

4

使用wget與​​代替:

-nc,​​:跳過下載將下載到現有文件。

例子:

wget -nc -q -O "/home/$outputfile" "$url" 
+1

你能指導我如何使用wget嗎? – thevoipman 2012-08-08 01:23:48

+2

最初我使用的是wget,但後來我改變了curl,因爲我想讓新下載的文件具有下載時間的時間戳。使用wget,它不會生成新的時間戳,而是無論時間戳來自它複製的源。我如何讓wget生成新的時間戳? – thevoipman 2012-08-10 13:58:04

+0

'-N'在wget中關閉時間戳。 – 2017-02-12 22:08:26

1

curl可能支持在您使用-O-J時跳過文件,但其行爲不一致。

-J--remote-header-name)基本上告訴-O--remote-name)選項,而不是使用提取的URL文件名服務器指定Content-Disposition文件名。這樣curl並不知道服務器將返回什麼文件名,所以爲了安全起見,它可能會忽略現有的文件。

來源:Re: -J "Refusing to overwrite..."

例如:

$ curl -LJO -H 'Accept: application/octet-stream' 'https://api.github.com/repos/x/y/releases/assets/12345 
Warning: Refusing to overwrite my_file.bin: File 
Warning: exists 
curl: (23) Failed writing body (0 != 16384) 

但是前面已經提到,它的行爲是不可預測的,它不適合所有文件。

2

您可以使用捲曲選項-C -。此選項用於恢復中斷下載,但如果文件已完成,則會跳過下載。請注意,-C的參數是一個短劃線。一個缺點可能是curl仍然會短暫地聯繫遠程服務器來請求文件大小。

相關問題