从命令行下载一个.zip文件

6

我一直在盲目尝试各种不同的 curlwget 命令来下载一些 .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,但仍无法成功。我已经尝试过多种选项的组合,但都没有成功。

你希望选项为你做什么? - Floris
@Floris,我上面的新评论有帮助澄清吗?再次强调,我只是想找到一种从命令行下载文件的方法——不用担心选项是否完美。 - zkurtz
1
可能只需要使用 curl -klo 命令吗?您正在使用双破折号 -- 这是用于“长”命令。单破折号 - 命令 -k= 不安全(无 https),-l= 仅列出(用于 FTP 获取目录列表),-o= 写入输出文件 可能是您想要的...但是,https:// 协议和 -k 开关的组合并没有什么意义,我必须说。 - Floris
4个回答

14

在我的电脑上,以下命令完全正常:

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

注意:

  1. 使用单破折号而非双破折号
  2. 我只指定了输出文件 - 不带引号且使用正斜杆
  3. 我将URL简化为特定季度

完成后,我在目录中找到了一个名为 bhcdata1.zip 的文件:

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

你可能会发现你也需要使用-k标志...尽管在我的机器上我不需要。那么它将是:

你可能需要使用-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

看起来您访问的URL有误,请尝试:

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 file_name_url.zip -O -J -L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接