如何调整终端命令从JSON文件下载指定文件夹内的PNG链接
解决方案
没问题,我来帮你调整这个终端命令,让它只抓取指定子目录下的PNG文件,分两种场景给你适配:
1. 匹配单一指定子目录
比如你只想下载路径中包含/display/的PNG文件,只需要修改egrep的正则表达式,加入目标目录的匹配规则即可:
egrep -o 'https:[^"]*/display/[^"]*png' file-name.json | xargs -n 1 curl -O
原理说明
原来的正则https:[^"]*png会匹配所有以https:开头、以png结尾且中间不含双引号的字符串。我们加入/display/后,就要求URL的路径中必须包含这个完整的目录片段,这样就自动过滤掉了其他子目录下的链接。
2. 匹配多个指定子目录
如果需要同时抓取/display/、/display-side/和/thumb/这些目录下的PNG,可以用正则的分支匹配(|表示“或”):
egrep -o 'https:[^"]*/(display|display-side|thumb)/[^"]*png' file-name.json | xargs -n 1 curl -O
原理说明
这里(display|display-side|thumb)会匹配括号内任意一个目录名,只要URL路径中包含其中一个目录的完整片段,就会被提取出来。
额外注意事项
- 如果你的目标目录名里包含正则特殊字符(比如
+、*),需要在字符前加反斜杠\进行转义,比如目录是display+thumb的话,要写成display\+thumb - 使用
curl -O时,如果不同子目录下存在同名PNG文件,后下载的文件会覆盖之前的。如果想保留原目录结构或者避免覆盖,可以改用wget -P ./downloads/(会自动创建对应目录),或者升级curl到较新版本后使用curl -OJ(按远程文件的原始文件名保存,避免冲突)
内容的提问来源于stack exchange,提问作者chapmanio
相关产品推荐
相关产品推荐

