我想curl下载链接,但我希望它跳过已经存在的文件。现在,我的代码行将继续覆盖它,无论如何:
curl
curl '$url' -o /home/$outputfile &>/dev/null &
如何实现这一点?
ohtdti5x1#
您可以使用curl选项-C -。此选项用于恢复中断的下载,但如果文件已完成,则将跳过下载。请注意,-C的参数是一个破折号。缺点可能是curl仍然会短暂地联系远程服务器以询问文件大小。
-C -
-C
szqfcxe22#
您可以将对curl的调用放在if块中:
if
if ! [ -f /home/$outputfile ]; then curl -o /home/$outputfile "url" fi
还要注意,在您的示例中,单引号中有$url,这并不符合您的要求。比较:
$url
echo '$HOME'
收件人:
echo "$HOME"
此外,curl有一个--silent选项,在脚本中很有用。
--silent
pjngdqdw3#
使用wget和--no-clobber:-nc、--no-clobber:跳过将下载到现有文件的下载。示例:
--no-clobber
-nc
wget -nc -q -O "/home/$outputfile" "$url"
ymzxtsji4#
当您将curl与-O和-J一起使用时,curl可能支持跳过文件,但其行为不一致。-J(--remote-header-name)基本上告诉-O(--remote-name)选项使用服务器指定的Content-Disposition文件名,而不是从URL中提取文件名。通过这种方式,curl并不真正知道服务器将返回什么文件名,因此出于安全防范,它可能会忽略现有的文件。来源:Re: -J "Refusing to overwrite..."例如:
-O
-J
--remote-header-name
--remote-name
Content-Disposition
$ 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)
然而,正如已经提到的,它的行为是不可预测的,它并不适用于所有文件。
idv4meu85#
从2022年4月27日发布的7.83版本开始,curl现在有一个--no-clobber选项,就像wget一样,它几乎可以做你想要的事情。
wget
5条答案
按热度按时间ohtdti5x1#
您可以使用curl选项
-C -
。此选项用于恢复中断的下载,但如果文件已完成,则将跳过下载。请注意,-C
的参数是一个破折号。缺点可能是curl仍然会短暂地联系远程服务器以询问文件大小。szqfcxe22#
您可以将对
curl
的调用放在if
块中:还要注意,在您的示例中,单引号中有
$url
,这并不符合您的要求。比较:收件人:
此外,
curl
有一个--silent
选项,在脚本中很有用。pjngdqdw3#
使用wget和
--no-clobber
:-nc
、--no-clobber
:跳过将下载到现有文件的下载。示例:
ymzxtsji4#
当您将
curl
与-O
和-J
一起使用时,curl
可能支持跳过文件,但其行为不一致。-J
(--remote-header-name
)基本上告诉-O
(--remote-name
)选项使用服务器指定的Content-Disposition
文件名,而不是从URL中提取文件名。通过这种方式,curl
并不真正知道服务器将返回什么文件名,因此出于安全防范,它可能会忽略现有的文件。来源:Re: -J "Refusing to overwrite..."
例如:
然而,正如已经提到的,它的行为是不可预测的,它并不适用于所有文件。
idv4meu85#
从2022年4月27日发布的7.83版本开始,
curl
现在有一个--no-clobber
选项,就像wget
一样,它几乎可以做你想要的事情。