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

the*_*man 21 command-line curl download

我想curl下载一个链接,但我想让它跳过已经存在的文件.现在,我所拥有的代码行将继续覆盖它,不管是什么:

curl '$url' -o /home/$outputfile &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

小智 23

你可以把你的电话curl放在一个if街区内:

if ! [ -f /home/$outputfile ]; then
  curl -o /home/$outputfile "url"
fi
Run Code Online (Sandbox Code Playgroud)

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

echo '$HOME'
Run Code Online (Sandbox Code Playgroud)

至:

echo "$HOME"
Run Code Online (Sandbox Code Playgroud)

此外,curl还有一个--silent在脚本中有用的选项.


Wol*_*ang 13

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

  • 如果服务器不支持恢复,则无法下载文件(文件不存在).错误:curl:(33)HTTP服务器似乎不支持字节范围.无法恢复. (3认同)

evi*_*tto 9

使用wget --no-clobber代替:

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

例:

wget -nc -q -O "/home/$outputfile" "$url" 
Run Code Online (Sandbox Code Playgroud)

  • 最初我使用的是wget,但之后我改为卷曲,因为我希望新下载的文件具有下载时的时间戳.使用wget,它不会生成新的时间戳,而是来自它复制的源的时间戳.如何让wget生成新的时间戳? (4认同)
  • “使用 wget”似乎不是“我如何使用curl 做到这一点”的答案...... (4认同)
  • -nc 选项不会下载较新的文件。**使用 `-N` 代替**,如果有更新版本,它将下载并覆盖该文件。 (2认同)