从命令行下载 .zip 文件

问题描述 投票:0回答:4

我一直在盲目地尝试许多

curl
wget
的变体来尝试下载一些
.zip
文件。我尝试的第一件事是:

curl --klo ".\bhcdata#1.zip" "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=[1-4]"

上面的命令实际上是在芝加哥联邦储备银行的文档中提供的,但它在我的 Ubuntu 机器上抛出错误消息:curl: option --klo: is unknown

有没有直接的方法来做到这一点?

为了准确地澄清我想要做什么:芝加哥联储网站允许您输入年份和季度,然后单击“下载数据文件”,它会为您提供相应数据的.zip文件。我想对所有季度执行此操作,因此我需要一种为每个季度编写命令的方法,以便我可以循环它们。上面示例命令中的 [1-4]

 会获取一年内的所有四个季度,但我一次只获取一个季度就可以了,而且我也尝试过替换 
1
 。我尝试过使用和不使用各种选项组合,但还没有任何效果。

curl download zip
4个回答
14
投票
在我的机器上,以下命令运行得很好:

curl -o ./bhcdata1.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=1"

注:

    单破折号而不是双破折号
  1. 我只指定了输出文件 - 不带引号且带有正斜杠
  2. 我仅将 URL 简化为特定季度
完成后,我在目录中发现了一个名为

bhcdata1.zip

 的文件:

-rw-r--r-- 1 floris floris 1545868 Feb 13 21:05 bhcdata1.zip

您可能会发现您还需要

-k

 标志……尽管我在我的机器上不需要。那么就可以了

curl -ko ./bhcdata1.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=1"

效果同样好...

奖励要获得全部四个季度,您只需将以下几行放入脚本中即可。将其另存为 downloadAll

。使用 
chmod 755 downloadAll
 将文件更改为“可执行文件”,然后键入 
./downloadAll
。享受…

#!/bin/bash for i in {1..4} do curl -ko ./bhcdata$i.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2011&DQTR=$i" done

结果:

-rw-r--r-- 1 floris floris 1545868 Feb 13 21:11 bhcdata1.zip -rw-r--r-- 1 floris floris 2413876 Feb 13 21:11 bhcdata2.zip -rw-r--r-- 1 floris floris 1573810 Feb 13 21:11 bhcdata3.zip -rw-r--r-- 1 floris floris 2500525 Feb 13 21:12 bhcdata4.zip

如果你想要多年,就做(某种变体)

#!/bin/bash for yr in {2010..2012} do for qtr in {1..4} do curl -ko ./bhcdata$yr_$qtr.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=$yr&DQTR=$qtr" done done
    

2
投票
您的网址似乎有误。尝试一下

wget "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=2013&DQTR=1"

您应该能够循环年份和季度


0
投票
以下 bash 脚本是我的最终产品:

#!/bin/bash for i in {1986..2011} do for j in {1..4} do curl -ko year${i}month${j}.zip "https://www.chicagofed.org/applications/bhc_data/bhcdata_create_output.cfm?DYR=$i&DQTR=$j" done done
    

0
投票
使用

curl -O -J -L file_name_url.zip
来自

curl(1)的解释:

-O, --remote-name


将输出写入本地文件,其名称类似于我们获得的远程文件。 (仅有的 使用远程文件的文件部分,路径被切断。)

用于保存的远程文件名是从给定的中提取的 网址,没有别的。

因此,该文件将保存在当前工作文件夹中 目录。如果您希望将文件保存在不同的目录中,请执行 确保在调用curl之前更改当前工作目录 使用 -O, --remote-name 标志!

您可以多次使用此选项,次数与您拥有的 URL 数量相同。

-J, --remote-header-name


(HTTP) 此选项告诉 -O, --remote-name 选项使用 服务器指定的内容-处置文件名而不是提取 来自 URL 的文件名。

-L, --location


(HTTP/HTTPS) 如果服务器报告请求的页面已移动 到不同的位置(用 Location: 标头和 3XX 响应代码),此选项将使curl 重做请求 新地方。如果与 -i、--include 或 -I、--head 一起使用, 将显示所有请求页面的标题。认证时 使用时,curl 仅将其凭据发送到初始主机。如果一个 重定向将curl带到不同的主机,它将无法 拦截用户+密码。另请参阅 --location-trusted 了解如何操作 改变这一点。您可以限制要遵循的重定向数量 使用 --max-redirs 选项。

当curl遵循重定向并且请求不是普通的GET时(对于 例如 POST 或 PUT),它将使用 GET 执行以下请求 如果 HTTP 响应是 301、302 或 303。如果响应代码是 任何其他 3xx 代码,curl 将使用以下命令重新发送以下请求 相同的未修改方法。

© www.soinside.com 2019 - 2024. All rights reserved.