我在一个简单的过程中停留了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上运行脚本)
答案 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