regex - 如何使用 curl -O 下载不包含 url 参数的文件?

标签 regex linux bash curl

我在一个简单的过程中被困了 2 个小时,因为我对 bash 脚本和正则表达式感到不舒服:(

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

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

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

我发现了一个正则表达式 .+?(?=\?) 似乎删除了 url prams 但我不知道如何让它与 curl -O< 一起工作命令。

非常感谢。

(ps:本人在osx上开发,打算在linux上运行脚本)

最佳答案

如果你想让 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

关于regex - 如何使用 curl -O 下载不包含 url 参数的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55030165/

相关文章:

python - 正则表达式拆分字符串并去除重复字符

c - 网络协议(protocol)中的定时器

bash - 在 awk 脚本的 BEGIN 部​​分中确定 NR

python - 可以告诉预期忽略模式或信号吗?

PHP preg_match 转义字符

R正则表达式: how to extract elements that contains two character in a certain order?

python - 使用 Python 子进程运行 `eval $(something)` 命令

linux - 如何终止死屏 session ?

bash - 如何使用 grep 模式匹配迭代移动文件/文件夹

bash - 如何关闭geany终端