如何利用Shell脚本程序将WordPress网站中的新浪图片批量下载到服务器本地

来源: 老季博客
日期: 2019-5-9
作者: 腾讯云/服务器VPS推荐评测/Vultr
阅读数: 45

自从前段时间新浪开启防盗链不能做位图床之后,我们写了【新浪图床近期不稳定论自建图床的重要性】,建议大家自建图床。下面我们说一下如何快速得将WordPress站点中使用到的新浪图片利用Shell脚本迅速本地化。本方法使用所有的网站,我们这里只是将WordPress作为举例说明。

WordPress备份、准备工作

备份是基础工作,大家一定要经常备份。

备份完成后我们这里将sql文件保存为:『 jiloc.sql 』

找出所有新浪图床上的照片

如果你是打开你网站的每一个页面,然后一个个去找的话,请打开窗户,确认下面没人,然后把电脑丢下去。老季这里提供一个非常快速的方法找出所有新浪图床上的图片,我们先来看看新浪图床图片 URL 的特点(主要是 ·wp_posts· 表):

http://wx4.sinaimg.cn/mw690/644ee728gy1fv0uy0qkzaj20im0okdtl.jpg
http://wx1.sinaimg.cn/mw690/644ee728gy1fv0wn9qytrj21hc0ein4u.jpg
http://wx3.sinaimg.cn/mw690/644ee728gy1fv0wn8y93cj20sg07pq94.jpg

我们需要一个正则表达式把上面的链接都匹配出来

  • 最前面的协议有两种情况 http 和 https,所以我们用 https?来匹配(问号表示前面的‘s’要么出现 0 次,要么出现 1 次)
  • 后面的 ws 开头的主机好像有 4 台,然后我就算他 10 台,所以对应的正则为 ws[0-9]
  • ‘/large/491ea66cgy1g26kbwkrgpj22001hs7wh’这一段杂七杂八的用[a-Z0-9/]+?来匹配,‘[a-Z0-9/]’这里表示不管你是字母还是数字,还是/都给你匹配上,后面的+表示前面的数字、字母会出现一次或者多次,最后的问号是用来防止过渡匹配的,在这不加问号也没问题。
  • 最后面的图片格式用.(jpg|png|gif)来匹配。

最终的正则表达式为

https?://wx[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)

当然,如果你的网站数据库非常大的话,你需要把这条正则写的尽量的精确,免得半天都跑不出来结果,比方说你全站 https 就可以这样写:

http://wx[1-4].sinaimg.cn/large/[a-Z0-9/]+?.(jpg|png|gif)

正则有了,我们现在去网站的数据库文件里面把所有新浪图床上的图片捞出来,执行下面的命令,最后的 jiloc.sql 是网站数据库备份文件。

正则有了,我们现在去网站的数据库文件里面把所有新浪图床上的图片捞出来,在终端中执行下面的命令,最后的 jiloc.sql 是网站数据库备份文件。

grep -Eo 'https?://wx[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' jiloc.sql
如何利用Shell脚本程序将WordPress网站中的新浪图片批量下载到服务器本地

我们这里站点用的图片全部都是 mw690 目录的图片。这里一定要注意,后面SQL语句替换的时候要用到。

注:这里只是正则匹配图片,并没有去重功能。

利用Shell脚本迅速将sql语句中的新浪图片下载到本地

我们在shell中用一个 for 循环把新浪上的图片全下载下来,建议在网站根目录新建一个图片目录,把你网站数据库备份文件 jiloc.sql 也放到这里,然后把图片全下载到这里,在图片目录里面执行,这里将图片目录设定在 wp-content/uploads/images/

for i in `grep -Eo 'https?://wx[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' jiloc.sql`;do wget $i;done

注意:本方法仅适用在Linux系统Shell终端中。

去除重复图片

如果有重复的文件则会命名为:xxxxx.jpg.1 , xxxxx.png.2 之类,可以通过在shell中执行下面命令批量删除。

rm -rf *.jpg.[0-9]

这里的.jpg需要自己分析下载到本地的文件名。

删除当前目录下的.sql文件

rm *.sql

WordPress使用新浪图床后图片无法打开,如何将图片迁移到本地完整过程 图文教程

链接到文章: https://jiloc.com/45575.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注