【问题标题】:How do I preserve the remote filename when Downloading a file using curl [duplicate]使用 curl [重复] 下载文件时如何保留远程文件名
【发布时间】:2011-11-19 01:27:13
【问题描述】:

可能重复:
How do I save a file using the response header filename with cURL

我需要下载成千上万张格式的图片

http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0

如果您将该链接粘贴到浏览器中,它会尝试下载名为 1.jp2 的文件

我想用 curl 来做同样的事情。但是,当我运行

curl -I 'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0'

文件名报告为 404.txt,您可以下载它并查看它实际上是我想要的文件。我不能使用 -O 选项,因为分配给文件的名称不好,而且我有技术原因需要系统上使用的实际名称。

如何让 curl 下载我在浏览器中轻松检索的相同文件?谢谢。

【问题讨论】:

  • 我的猜测是,这在某种程度上与调用者的用户代理有关,尽管我只是尝试添加 chrome 的 UA,但没有帮助。

标签: shell scripting curl


【解决方案1】:

解决方法是使用-O -J

-O, --remote-name          Write output to a file named as the remote file  
-J, --remote-header-name   Use the header-provided filename

所以...

curl  -O -J  'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=0'

我必须升级我的 CURL。我有 v 7.19 不支持 -J 但 7.22 (这是最新的)支持。

【讨论】:

  • 你可以写-OJ。或者例如-LOJR 如果您与其他选项结合使用
  • 根据7.20.0 § curl - Changes-J--remote-header-name 选项在 7.20.0 中添加。
  • 只有--remote-name 就足够了。
【解决方案2】:

您可以使用 -o 选项吗?例如

 curl  'http://oregondigital.org/cgi-bin/showfile.exe?CISOROOT=/baseball&CISOPTR=[0-9]' -o "#1.jpg"

【讨论】:

  • 他在他的问题中说他不能使用 -O 因为他不希望文件名是 showfile.exe?... 等等。注意! :)
  • 嗯,你也应该注意。它是一个小“o”,它可以让用户定义文件名。
  • 在这种情况下用户无法定义文件名......它来自传入响应的标题
  • -o 让您设置自定义名称,更重要的是,为下载的文件设置自定义位置。 -O 自动命名文件,但也将其下载到默认位置(在我的情况下是我的主文件夹)。那么我如何将两者结合起来,并选择文件的下载位置,但保留服务器的名称?
猜你喜欢
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2019-01-13
  • 2013-03-07
  • 1970-01-01
  • 2017-01-16
  • 2012-09-03
相关资源
最近更新 更多