我在这种语法中使用curl:
curl -o myfile.jpg http://mysite.com/myfile.jpg
如果我两次运行此命令,则会得到两个文件:
myfile.jpg
myfile-1.jpg
如何告诉CURL我希望它覆盖文件(如果存在)?
我在这种语法中使用curl:
curl -o myfile.jpg http://mysite.com/myfile.jpg
如果我两次运行此命令,则会得到两个文件:
myfile.jpg
myfile-1.jpg
如何告诉CURL我希望它覆盖文件(如果存在)?
Answers:
采用:
curl http://mysite.com/myfile.jpg > myfile.jpg
noclobber
启用该选项(set +o noclobber
)。
我遇到了同样的问题,无论服务器端提供什么,我都想重用相同的文件名,在这种情况下,您可能会通过 basename
➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg
那么您可以编写一个类似于以下内容的助手bash函数:
➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'
但就我而言,文件名甚至不是URL的一部分,它带有content-disposition;与curl命令行是
$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'
-fSL
如果服务器端提供302重定向,则可以忽略它处理的内容;在-R
用于服务器端时间戳,-J
考虑服务器端Content-Disposition
,并-O
切换到下载行为而不是在终端倾倒;
但是,如果文件名存在,它仍然会拒绝覆盖;如果服务器端Last-Modified
时间戳较新,我希望它覆盖;
最终有了一个wget解决方案,它可以做到:
$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'
该-N
是检查服务器端tiemstamp和覆盖,只有当服务器端有新的版本; --content-disposition
是要考虑Content-Disposition
标题;wget的默认行为是下载到服务器端给定的文件名。
就您而言,如果您不关心时间戳,那只是
$ wget -O myfile.jpg http://mysite.com/myfile.jpg
curl
哪个系统上的哪个版本?