我有这样的cURL调用:
curl --silent --max-filesize 500 --write-out "%{http_code}\t%{url_effective}\n" 'http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.[200-210].dmg' -o /dev/null
此调用将生成具有HTTP代码(通常为200或404)的URL列表,如下所示:
404 http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.203.dmg
404 http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.204.dmg
200 http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.205.dmg
404 http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.206.dmg
唯一有效的URL是200 HTTP代码之前的URL,因此我想在cURL中放置一个正则表达式,以便它仅下载以200开头的行
关于如何在不使用bash脚本的情况下执行此操作的任何想法?
提前谢谢
答案 0 :(得分:0)
您可以使用以下内容:
curl --silent -f --max-filesize 500 --write-out "%{http_code}\t%{url_effective}\n" -o '#1.dmg' 'http://fmdl.filemaker.com/maint/107-85rel/fmpa_17.0.2.[200-210].dmg'
这将尝试访问每个url,当它不是404或不是太大时,将其下载到名称将基于url索引的文件中。
使用-f
标志可以避免在HTTP代码不成功时输出响应的内容,而-o
标志可以指定输出文件,其中#1
对应于您的[200-210]
范围的有效值(添加其他[]
或{}
可以使您通过其索引来引用URL的其他部分)。
请注意,在我的测试过程中,--max-filesize 500
标志阻止了唯一未出现在404 fmpa_17.0.2.205.dmg