我想curl
下載一個鏈接,但我希望它跳過已存在的文件。現在,我的代碼行會繼續覆蓋它沒有什麼母校:如何在使用curl下載時跳過已存在的文件?
curl '$url' -o /home/$outputfile &>/dev/null &
如何可以做到這一點?
我想curl
下載一個鏈接,但我希望它跳過已存在的文件。現在,我的代碼行會繼續覆蓋它沒有什麼母校:如何在使用curl下載時跳過已存在的文件?
curl '$url' -o /home/$outputfile &>/dev/null &
如何可以做到這一點?
你可以只是把你的電話給curl
的if
塊中:
if ! [ -f /home/$outputfile ]; then
curl -o /home/$outputfile "url"
fi
另外請注意,在你的榜樣,你有$url
單引號內,它不會做你想做的。比較:
echo '$HOME'
要:
echo "$HOME"
此外,curl
有--silent
選項,可以在腳本中非常有用。
使用wget與代替:
-nc
,:跳過下載將下載到現有文件。
例子:
wget -nc -q -O "/home/$outputfile" "$url"
你能指導我如何使用wget嗎? – thevoipman 2012-08-08 01:23:48
最初我使用的是wget,但後來我改變了curl,因爲我想讓新下載的文件具有下載時間的時間戳。使用wget,它不會生成新的時間戳,而是無論時間戳來自它複製的源。我如何讓wget生成新的時間戳? – thevoipman 2012-08-10 13:58:04
'-N'在wget中關閉時間戳。 – 2017-02-12 22:08:26
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)
但是前面已經提到,它的行爲是不可預測的,它不適合所有文件。
您可以使用捲曲選項-C -
。此選項用於恢復中斷下載,但如果文件已完成,則會跳過下載。請注意,-C
的參數是一個短劃線。一個缺點可能是curl仍然會短暫地聯繫遠程服務器來請求文件大小。
非常有幫助,謝謝你指出。但我通過PHP這樣做,我如何運行,如果通過PHP語句? – thevoipman 2012-08-08 06:14:21
我不知道我的頭頂PHP,但我相信它有一個相對簡單的機制來查看文件是否存在。 – 2012-08-09 14:07:20