如何下载带有curl -O的文件(不包括url参数)?

时间:2019-03-06 18:46:26

标签: regex linux bash curl

我在一个简单的过程中停留了2个小时,因为我对bash脚本和regex不满意:(

我想使用bash脚本下载文件。可通过具有以下名称模式的URL访问目标文件:

https://domain-name.com/JAWSDB_xxxxxxxxxxxxxxxxx.sql.gz?AWSAccessKeyId=XXXXXXXXXXXXXXXX&Expires=xxxxxx&Signature=%2XXXXXXXXXXXXXXXXXXXX

我的第一个想法是使用curl -O,但它会创建包括URL参数在内的非常脏的文件名,因此我只想保留以下部分JAWSDB_xxxxxxxxxxxxxxxxx.sql.gz(并删除尾随的URL参数)。

我发现一个正则表达式.+?(?=\?)似乎删除了网址婴儿车,但我不知道如何使其与curl -O命令一起使用。

非常感谢。

(Ps:我正在osx上开发并计划在linux上运行脚本)

1 个答案:

答案 0 :(得分:0)

如果您希望使用curl进行繁重的工作,请给--remote-header-name快照,该快照将接受来自服务器的对象名称,而不是从curl取消引用的url中提取文件名。 >

curl --remote-header-name -O 
 https://codeload.github.com/curl/curl/zip/master?name=value
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4708k    0 4708k    0     0  1677k      0 --:--:--  0:00:02 --:--:-- 1676k
curl: Saved to filename 'curl-master.zip'
ls -lt
total 21304
-rw-r--r--     1 randrews  wheel  4821944 Mar  6 13:56 curl-master.zip

您的脚本中似乎已对JAWSDB_xxxxxxxxxxxxxxxxx.sql.gz进行了参数设置,如果将其包含在此处,将有助于提供指导。

在这种情况下,您可以通过-O将curl的输出重定向到您选择的文件。

curl -O https://domain-name.com/JAWSDB_xxxxxxxxxxxxxxxxx.sql.gz?AWSAccessKeyId=XXXXXXXXXXXXXXXX&Expires=xxxxxx&Signature=%2XXXXXXXXXXXXXXXXXXXX > JAWSDB_xxxxxxxxxxxxxxxxx.sql.gz