背景
我积累了很多照片,按事件分放在大量的目录中,同时每个目录下面均含有大量照片。现在,我想把这些照片发布到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 | --- |
然后,操起神器Excel,原理同这篇文章,制作好命令组,这里就会用到name.txt
。
这里及下面所有sh脚本的命令都在Windows Subsystem for Linux中运行。
格式:<center>[name](https://www.vvzero.com/Gallery/<name>.html)</center>
将生成的最后一列复制进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"
Step 7 把/tmp/中所有文件附加至/md/对应文件中
同理
格式:cat "./tmp/<name>.md" >> "./md/<name>.md"
Step 8 整理文件至hexo目录
依照hexo目录结构,整理刚刚/md
中所有文件至hexo的/source/Gallery
中。
并执行hexo d -g
。
至此,全部工作完成!
总结
用好批处理和Excel。