substitute-sinaimg-with-githubimg-url

最好的图床 新浪 已经禁止外链,图片迁移至 github。

前些天,得知 新浪 图片禁止外链,就在想怎么解决图片问题,直接放在 github pages 里面又要改动很多。

恰好最近在使用 vs-code,试了一下 picgo 插件,感觉很棒,smsm图床我是不敢用,404了去找谁。

于是在github建一个 repo 专门存放图片,还能备份到坚果云一份。替换新浪图片链接为 github 链接。

先是在 vs-code 里面手动替换了几个,工作量太大,于是写了个bash脚本完成这件事。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

#!/bin/bash
# Author: [email protected]
# Date: 2019-04-29
# 批量下载 md 文件中的 新浪图片,重命名为 `文件名-数字` 格式
# 替换md文件中的 新浪图片地址
# 批量下载图片
download_pic() {
for i in `ls -1 *.md`; do
lists="$(grep -Eio 'https?://ws..sinaimg.[-0-9a-z/]+.jpg' "$i")"
if [[ $lists ]]; then
total=`echo "$lists"|wc -l`; j=1
while [[ $j -le $total ]]; do
echo ${i%.md}-$j
picurl=`echo "$lists"|sed -n "$j p"`
echo $picurl
# 此处使用了 httpie,当然可以使用 crul wget 等工具
http -d "$picurl" -o "../pic/${i%.md}-$j.jpg"
((j++))
done
fi
done
}
# 替换 url 地址。两条完全可以合在一起,为了减少意外错误,这里分开
substitute_url() {
for i in `ls -1 *.md`; do
lists="$(grep -Eio 'https?://ws..sinaimg.[-0-9a-z/]+.jpg' "$i")"
if [[ $lists ]]; then
total=`echo "$lists"|wc -l`; j=1
while [[ $j -le $total ]]; do
echo ${i%.md}-$j
picurl=`echo "$lists"|sed -n "$j p"`
echo $picurl
# 说明:picurl 中包含'/',因此使用\% 作为自定义正则标识符
# s 命令匹配部分 ![] 都需要转义,替换的不用,后一个 s 使用%分割而不是/
# 使用 {} 限定替换范围
sed -Ei "\%$picurl% { s/\!\[.*\]/![${i%.md}-$j.jpg]/; s%$picurl%https://raw.githubusercontent.com/rachpt/imgs/master/${i%.md}-$j.jpg%; }" "$i"
((j++))
done
fi
done
}
# 调用
download_pic
echo '若无问题 30 秒后开始替换'
echo 'Ctrl + C 强制取消替换'
sleep 30
substitute_url
echo 'Done!'

脚本在 https://github.com/rachpt/shell-scripts/blob/master/change-url.sh

这里记录一下。