背景

我积累了很多照片,按事件分放在大量的目录中,同时每个目录下面均含有大量照片。现在,我想把这些照片发布到hexo博客中,同时保留原有的目录结构。具体的目标是,在主页面上展示多个超链接,超链接名同目录名,超链接指向各相应子页面,直接展示目录下的照片。

难点

  • 目录亮和照片量均极大,无法手动完成。
  • 含有目录结构,暂时找不到相应工具。

关键思路

把所有目录下的文件名写至对应文件内

准备

平台

  • Windows 10
    或者类似平台

工具

  • 腾讯云COS客户端
  • Excel 2016
  • Windows Subsystem for Linux
  • hexo框架

操作步骤

Step 1 上传所有照片至腾讯云COS

使用腾讯云COS客户端的文件夹上传很容易完成,而且可以保留目录结构(这一点很重要)。

Step 2 获取所有目录名

使用powershell直接完成,并保留目录名以便接下来使用。
ls -name > name.txt
这一文件很重要,保存好,接下来会不断用到。

Step 3 建立index.md

为了便于操作,新建一个目录,这里,我建立一个/gallery目录。
在此目录内,新建一个/md/index.md,即上述主页面。
文件头按照hexo标准,写好文件头。

1
2
3
4
---
title: Gallery
date: xxxx-xx-xx xx:xx:xx
---

然后,操起神器Excel,原理同这篇文章,制作好命令组,这里就会用到name.txt
这里及下面所有sh脚本的命令都在Windows Subsystem for Linux中运行。
格式:<center>[name](https://www.vvzero.com/Gallery/<name>.html)</center>
建立index.md
将生成的最后一列复制进index.md即可。使用<center> </center>只是为了美观。

Step 4 将各照片目录中的文件名写入对应文件(关键)

首先在/gallery中新建一个/tmp目录,用于暂存处理文件。
同样使用Excel和name.txt,生成命令组。这里需要使用ls命令,思路就是根据name.txt,一对一写入。
将各照片目录中的文件名写入对应文件
格式:ls -l "./<name>" |awk '{print $9}' > "./tmp/<name>.md"
解释:ls -l |awk '{print $9}'可以直接提取文件名,并且一列显示。
然后我们就可以在/gallery/tmp下获得含有对应目录下照片名的md文件。

Step 5 在/tmp里各文件每行加上指定字符

因为markdown语法中,![]()表示添加图片,故我们需要在每一行的文件前后加上这类标识符以及url的前半部分(毕竟保存在COS中)。这里,我使用了sed命令,具体用法参见sed在行首或者行尾添加内容。下图表示在每一行末尾加上’)’。
格式:sed 's/$/&)/g' "<name>.md"
每行加上指定字符

Step 6 建立/md/<name>.md

同样使用Excel和name.txt
格式:echo "---\ntitle: <name>\ndate: 2018-03-05 11:00:00\n---\n" > "<name>.md"
建立md

Step 7 把/tmp/中所有文件附加至/md/对应文件中

同理
格式:cat "./tmp/<name>.md" >> "./md/<name>.md"
文件附加

Step 8 整理文件至hexo目录

依照hexo目录结构,整理刚刚/md中所有文件至hexo的/source/Gallery中。
并执行hexo d -g

至此,全部工作完成!

总结

用好批处理和Excel。

页面展示

展示
展示