zoukankan      html  css  js  c++  java
  • 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'。

  • 相关阅读:
    线程池源码解析
    String与常量池
    spring循环依赖
    ConcurrentHashMap源码解析(JDK8)
    原子类源码分析
    web service和ejb的区别
    RPC
    hashcode()和equals()的区别
    关于json
    Lifecycle of jsf
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15188743.html
Copyright © 2011-2022 走看看