You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wget结合正则表达式选择性下载文件时/i匹配失效问题

搞定wget正则匹配太宽泛的问题

嘿,我来帮你捋清楚这个问题的根源,以及怎么解决它~

为啥第一个命令会下载所有jpg?

你用的正则.*/i.*.jpg其实有个坑:它匹配的是整个URL路径里任意位置包含字母i的jpg文件,而不是你想要的「文件名以i开头」的文件。举个例子,如果某个jpg文件的上级目录叫images,或者域名里有个i,那这个正则都会把它匹配上,再加上-A jpg的过滤,自然就下载了所有jpg。

而换成.*/in.*.jpg时,刚好你的目标文件名都是以in开头,其他jpg的路径里没这个组合,所以就精准命中了——这纯属巧合,不是正确的解决思路哦。

另外你提到的「/i表示不区分大小写」是其他正则引擎(比如JS)的写法,wget用的POSIX正则根本不吃这一套,所以这个误解和当前问题没关系哈。

正确的正则写法,精准锁定目标文件

要只下载文件名以i开头的jpg,得让正则只盯着文件名部分,而不是整个路径。给你两种靠谱的写法:

写法1:精准匹配文件名开头

用[^/]*来匹配文件名(因为文件名里不会有/),确保只有文件名以i开头的才被匹配:

wget -r -nd -P test -A jpg --accept-regex '.*/i[^/]*\.jpg'

拆解一下:

  • .*/:匹配到最后一个/之前的所有路径内容
  • i[^/]*:匹配以i开头、后面跟任意非/字符的文件名
  • \.jpg:转义后的.jpg,避免.匹配任意字符

写法2:锚定URL结尾

直接用$锁定URL的末尾,确保文件名以i开头且以.jpg结尾:

wget -r -nd -P test -A jpg --accept-regex 'i.*\.jpg$'

这个更简洁,$表示URL必须以.jpg结尾,前面的i.*就只会匹配文件名的开头部分了。

先测试再下载,避免踩坑

建议先加--dry-run参数做个模拟下载,看看输出里是不是只有你要的两个文件:

wget -r -nd -P test -A jpg --accept-regex '.*/i[^/]*\.jpg' --dry-run

没问题再去掉--dry-run实际下载就行~


内容的提问来源于stack exchange,提问作者Plouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:22