hexo的index处理

需求

如果不在时间线写文章,通过docs进行分类处理的时候,子目录里面的目录不好处理,通过脚本扫描处理目录

实现

准备两个脚本,一个脚本遍历,一个脚本进行执行更新

update.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /bin/bash
#获取当前的目录
rootdir=`pwd`
#遍历目录执行
for dir in `find . -type d|grep -v "assets\|file"`
do
echo "正在更新: $dir"
cd $dir
#echo `pwd`
mdnum=`find ./ -name "*.md"|grep -v index.md|wc -l`
if [ $mdnum != 0 ];then
#echo $mdnum
sh $rootdir/generatemenu.sh > ./index.md
fi
#echo "当前目录"
#回到执行根目录
cd $rootdir

done
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
#! /bin/sh
mydate=`date "+%Y-%m-%d %H:%M:%S"`
mydir=`pwd | awk -F "/" '{print $NF}'`
p1=$p1"---\n"
p1=$p1"title: $mydir \n"
p1=$p1"date: $mydate \n"
p1=$p1"description: $mydir 的文章\n"
p1=$p1"---\n"
p1=$p1"\n"

for mdfile in `find . -name "*.md"|grep -v index.md|sort`
do
# echo $mdfile
mdfilename=`echo $mdfile|rev|cut -d / -f 1 |rev`
path=`echo $mdfile|sed 's/.\{2\}//'`
pdir=`echo $path|cut -d / -f 1`
p2dir=`echo $path|cut -d / -f 2`
#&& [[ -z $pdir ]]
# 一级目录如果含有md字段,就不做一级分类了
if [[ $pdir =~ "md" ]] ;then
:
else
if [[ $p1 =~ "## $pdir" ]];then
:
else
p1=$p1"## "$pdir"\n"
fi
fi

# 二级目录如果含有md字段,就不做二级分类了
if [[ "$p2dir" =~ ".md" ]];then
:
else
if [[ $p1 =~ "## $p2dir" ]];then
:
else
p1=$p1"### "$p2dir"\n"
fi
fi

p1=$p1"* [${mdfilename%???}](${path%???})\n"

done
echo $p1

执行update.sh就可以遍历的更新子目录的index了

文章添加头部标记

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
for file in `find . -name "*.md"|grep -v index.md`
do
mydate=`date "+%Y-%m-%d %H:%M:%S"`

echo $file;
docname=`echo $file|rev|cut -d / -f 1 |rev|cut -d "." -f 1`
titlenum=`cat $file|head -n 5|grep title|wc -l`
echo $titlenum
if [ $titlenum -eq 0 ];then


echo "需要处理"
sed -i '' '1 i \
---
' $file
sed -i '' '1 i \
description: $docname
' $file
sed -i '' '1 i \
date: $mydate
' $file

sed -i '' '1 i \
echo title: $docname
' $file
sed -i '' '1 i \
---
' $file

fi

done

变量没更新的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for file in `find . -name "*.md"|grep -v index.md`
do
mydate=`date "+%Y-%m-%d %H:%M:%S"`

echo $file;
docname=`echo $file|rev|cut -d / -f 1 |rev|cut -d "." -f 1`
titlenum=`cat $file|head -n 5|grep title|wc -l`
echo $titlenum
if [ $titlenum -eq 1 ];then

echo "需要处理"
sed -i "" "s/^description:.*/description: $docname/g" $file
sed -i "" "s/^date:.*/date: $mydate/g" $file
sed -i "" "s/^title:.*/title: $docname/g" $file

fi

done

再跑一遍即可