使用curl下载时如何跳过现有文件?

时间:2012-08-08 01:11:56

标签: curl command-line download

我希望curl下载链接,但我希望它能够跳过已存在的文件。现在,我所拥有的代码行将继续覆盖它,不管是什么:

curl '$url' -o /home/$outputfile &>/dev/null &

如何实现这一目标?

4 个答案:

答案 0 :(得分:20)

您可以在curl区块内拨打if电话:

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

另请注意,在您的示例中,您在单引号内部有$url,这将无法执行您想要的操作。比较:

echo '$HOME'

要:

echo "$HOME"

此外,curl有一个--silent选项,可以在脚本中使用。

答案 1 :(得分:10)

使用wget代替--no-clobber

  

-nc--no-clobber:跳过将下载到现有文件的下载内容。

示例:

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

答案 2 :(得分:8)

您可以使用curl选项-C -。此选项用于恢复损坏的下载,但如果文件已经完成,将跳过下载。请注意,-C的参数是一个短划线。缺点可能是curl仍然会短暂地联系远程服务器以询问文件大小。

答案 3 :(得分:1)

curl可能支持在-O-J使用文件时跳过文件,但其行为不一致。

-J--remote-header-name)基本上告诉-O--remote-name)选项使用服务器指定的Content-Disposition文件名而不是从中提取文件名URL。这样,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)

然而,如前所述,它的行为是不可预测的,并不适用于所有文件。