使用curl下载时如何跳过已存在的文件?

yws3nbqq  于 2023-06-30  发布在  其他
关注(0)|答案(5)|浏览(239)

我想curl下载链接,但我希望它跳过已经存在的文件。现在,我的代码行将继续覆盖它,无论如何:

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

如何实现这一点?

ohtdti5x

ohtdti5x1#

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

szqfcxe2

szqfcxe22#

您可以将对curl的调用放在if块中:

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

还要注意,在您的示例中,单引号中有$url,这并不符合您的要求。比较:

echo '$HOME'

收件人:

echo "$HOME"

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

pjngdqdw

pjngdqdw3#

使用wget和--no-clobber
-nc--no-clobber:跳过将下载到现有文件的下载。
示例:

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

ymzxtsji4#

当您将curl-O-J一起使用时,curl可能支持跳过文件,但其行为不一致。
-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)

然而,正如已经提到的,它的行为是不可预测的,它并不适用于所有文件。

idv4meu8

idv4meu85#

从2022年4月27日发布的7.83版本开始,curl现在有一个--no-clobber选项,就像wget一样,它几乎可以做你想要的事情。

相关问题