linux中循环批量下载文本文件中的超链接图片,然后在h2中通过sql语句批量更新图片链接地址
linux中循环批量下载文本文件中的超链接图片,然后在h2中通过sql语句批量更新图片链接地址
发现halo的文章中很多图片的超链接地址是这样的:
<div class="content"><img src="https://doc-1256053707.cos.ap-beijing.myqcloud.com/adfasdfasds32323we.png" alt="adfasdfasds32323we" /></div>
图片都是存在云端,不在本地系统的附件库中,于是想着把云端的图片都拉取到本地,然后更新文章中的图片链接地址。
步骤
1 拉取云端的图片到本地
shell脚本如下:
#!/bin/bash
# 用于设置每篇文章中的图片链接下载完图片后的存储路径,如:pics1,pics2,...
count=1
find /mnt/d/spark/ -name '*.html' | while read article
do
# article=/mnt/d/spark/bigdata.html
egrep 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/.*\.png' $article | awk '{print $2}' | while read line
do
#echo $line
tmp=${line#*\"}
src=${tmp%\"*}
#wget -bcP pics${count}/ $src > /dev/null
wget -bcP pics/ $src > /dev/null
#done <<< "`egrep 'https://doc-[0-9]{10}.cos.ap-beijing.myqcloud.com/[0-9]{14}.png' $article | awk '{print $2}'`"
done
rm -f ./wget-log*
#let count++
count=$(($count+1))
done
#sed -n 's/https:\/\/doc-[0-9]{10}.cos.ap-beijing.myqcloud.com//http://mediocre/g' $article
然后通过scp命令远程拷贝图片到系统所在服务器:
scp -r pics/* lenovo:/root/.halo/upload/2020/4/
2 修改halo的文章中的图片链接地址
查看所有需要处理的文章:
SELECT ID,TITLE FROM POSTS
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/', 'im');
SELECT ID,TITLE,ORIGINAL_CONTENT FROM POSTS
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, 'alt=".+"', 'im');
ID TITLE
46 搭建 (OK)
52 Kudu (OK)
56 Structured Streaming (OK)
57 Spark Streaming(OK)
58 sparksql (OK)
59 sparksql2
62 ge4)-sparksql
64 Spark原理_运行过程_高级特性 (OK)
65 rdd算子1
66 rdd算子2
67 rdd算子3
96 概述:1-4 (OK)
418 报表生成 md格式的图片
419 既有md格式的图片,又有html格式的图片:
14 rows
SELECT ID,TITLE,ORIGINAL_CONTENT FROM POSTS
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, '!\[.+\]', 'im');
AND ID IN (320,363,418,493,494,495,496,504);
ID TITLE
320 JAVA运算符总结 (OK)
363 换行符号CRLF、CR、LF
418 flink1
493 flink2
494 flink3
495 flink4
496 flink5
504 kafka
8 rows
=================================
概述
https://doc-1256053707.cos.ap-beijing.myqcloud.com/sadfasdasdfasdf3234231s1.png
https://doc-1256053707.cos.ap-beijing.myqcloud.com/sadfasdasdfasdf3234231s2.png
https://doc-1256053707.cos.ap-beijing.myqcloud.com/sadfasdasdfasdf3234231s3.png
http://vserver:6666/upload/2020/4/
=================================
UPDATE POSTS SET ORIGINAL_CONTENT = REGEXP_REPLACE(ORIGINAL_CONTENT, 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/', 'http://vserver:6666/upload/2020/4/')
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/', 'im');
UPDATE POSTS SET FORMAT_CONTENT = REGEXP_REPLACE(FORMAT_CONTENT, 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/', 'http://vserver:6666/upload/2020/4/')
WHERE REGEXP_LIKE(FORMAT_CONTENT, 'https://doc-.*\.cos\.ap-beijing\.myqcloud\.com/', 'im');
-- 有漏洞,该REGEXP_REPLACE方法是在一行中最大程度匹配,将width属性替换没了,下次注意了。
-- 解决方法:将`'alt=".+"'` 修改为 `'alt=".+?"'`
UPDATE POSTS SET ORIGINAL_CONTENT = REGEXP_REPLACE(ORIGINAL_CONTENT, 'alt=".+"', 'alt=""')
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, 'alt=".+"', 'im');
UPDATE POSTS SET FORMAT_CONTENT = REGEXP_REPLACE(FORMAT_CONTENT, 'alt=".+"', 'alt=""')
WHERE REGEXP_LIKE(FORMAT_CONTENT, 'alt=".+"', 'im');
UPDATE POSTS SET ORIGINAL_CONTENT = REGEXP_REPLACE(ORIGINAL_CONTENT, '!\[.+\]', '![]')
WHERE REGEXP_LIKE(ORIGINAL_CONTENT, '!\[.+\]', 'im');
SELECT ID,TITLE,FORMAT_CONTENT FROM POSTS
WHERE REGEXP_LIKE(FORMAT_CONTENT, '!\[.+\]', 'im')
AND ID=320;
知识扩展:正则表达式中 ?
的另一个作用:
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。