1、测试文件目录结构
如下图,每一个目录中有一个单独的章节。
image.png
都是些口水话,这次的md文件带图片,方便演示一般的场景。
2、将不同目录下的md文件合并
运行如下命令:
localhost:01_PandocMergeDocInSeparateDir chengxia$ pandoc 01_GoodsOfCats/01_GoodsOfCats.md 02_HowToFeedCats/02_HowToFeedCats.md 03_GainsFromCats/03_GainsFromCats.md --resource-path="./01_GoodsOfCats/:./02_HowToFeedCats/:./03_GainsFromCats/" --toc --toc-depth=5 --number-sections --embed-resources --standalone -o merge/all.html
其中,--toc --toc-depth=5 --number-sections
参数是设置目录,并自动编号,最多的目录支持层级是5级,--embed-resources
是指将图片等资源直接嵌入到输出文件(比如将图片用base64编码),--standalone
是指生成一个单独的文件(会添加head),-o merge/all.html
指定输出到merge/all.html
。
效果如下:
从这里,可以看出,在merge目录下生成了一个1.4M的html文件(因为图片资源嵌入了html,所以体积比较大),效果符合预期。
如果想将图片专门存放,可以先用cd切换到目标输出路径(如果不这样,最后html中的图片引用地址有问题),并运行命令。如下:
localhost:01_PandocMergeDocInSeparateDir chengxia$ cd merge/
localhost:merge chengxia$ pandoc ../01_GoodsOfCats/01_GoodsOfCats.md ../02_HowToFeedCats/02_HowToFeedCats.md ../03_GainsFromCats/03_GainsFromCats.md --resource-path="../01_GoodsOfCats/:../02_HowToFeedCats/:../03_GainsFromCats/" --toc --toc-depth=5 --number-sections --standalone --extract-media="./img/" -o all.html
这里,--extract-media="./img/"
参数指定图片存放的专门目录。
效果如下:
可以看出,因为不嵌入图片,这次输出的html小了很多。
3、合并md文件并用文件名作为一级标题
如果我们想,将文件名作为合并后文件的一级标题,然后将各个文件中的标题层级都下移一层,该如何处理?由于没有找到pandoc比较好的支持,这里换一个思路,改成先用awk处理md文件,然后用pandoc合并。
3.1 用awk处理md文件
3.1.1 awk命令将文件名插入到原md文件作为一级标题
执行如下命令可以将文件名插入到md文件,并修改元文件中的标题层级:
awk 'NR==1{sub(/^#/,"”##");print "# "substr(FILENAME, 1, length(FILENAME)-3)"\n" $0}NR!=1{sub(/^#/,"##");print $0}' ../02_HowToFeedCats/02_HowToFeedCats.md
效果如下:
localhost:merge chengxia$ cat ../02_HowToFeedCats/02_HowToFeedCats.md
第二章,主要讲如何养猫
# 1、如何养猫
需要给猫准备稳定的住所,准备猫砂盆、水碗和食盆。
![02_AMiddleCat](02_AMiddleCat.png)
localhost:merge chengxia$ awk 'NR==1{sub(/^#/,"”##");print "# "substr(FILENAME, 1, length(FILENAME)-3)"\n" $0}NR!=1{sub(/^#/,"##");print $0}' ../02_HowToFeedCats/02_HowToFeedCats.md
# ../02_HowToFeedCats/02_HowToFeedCats
第二章,主要讲如何养猫
## 1、如何养猫
需要给猫准备稳定的住所,准备猫砂盆、水碗和食盆。
![02_AMiddleCat](02_AMiddleCat.png)
localhost:merge chengxia$
3.1.2 处理掉一级标题中的目录和原文件中的标题编号
执行如下命令:
localhost:merge chengxia$ awk 'NR==1{sub(/^#/,"\n##");sub(/# [0-9\.、\s]/,"# ");match(substr(FILENAME, 1, length(FILENAME)-3),"/.+_");print "\n# "substr(substr(FILENAME, 1, length(FILENAME)-3),RSTART+RLENGTH)"\n" $0}NR!=1{sub(/^#/,"\n##");sub(/# [0-9\.、 ]+/,"# ");print $0}' ../02_HowToFeedCats/02_HowToFeedCats.md
# HowToFeedCats
第二章,主要讲如何养猫
## 如何养猫
需要给猫准备稳定的住所,准备猫砂盆、水碗和食盆。
![02_AMiddleCat](02_AMiddleCat.png)
localhost:merge chengxia$
到这里md文件的格式调整完成,下面进行合并。
3.2 合并
运行如下命令:
localhost:merge chengxia$ for f in ../01_GoodsOfCats/01_GoodsOfCats.md ../02_HowToFeedCats/02_HowToFeedCats.md ../03_GainsFromCats/03_GainsFromCats.md; do awk 'NR==1{sub(/^#/,"\n##");sub(/# [0-9\.、\s]/,"# ");match(substr(FILENAME, 1, length(FILENAME)-3),"/.+_");print "\n# "substr(substr(FILENAME, 1, length(FILENAME)-3),RSTART+RLENGTH)"\n" $0}NR!=1{sub(/^#/,"\n##");sub(/# [0-9\.、 ]+/,"# ");print $0}' $f; done | pandoc --resource-path="../01_GoodsOfCats/:../02_HowToFeedCats/:../03_GainsFromCats/" --toc --toc-depth=5 --number-sections --standalone --extract-media="./img/" --metadata title="养猫指南" --metadata author="没泡泡" -o all.html
localhost:merge chengxia$
效果如下:
image.png
可以看出,将第一章中的metadata一并显示了,这里先修改下第一章,去掉metadata。修改后01_PandocMergeDocInSeparateDir/01_GoodsOfCats/01_GoodsOfCatsV2.md
:
第一章,主要介绍养猫的好处。
# 1、养猫的好处
养猫可以培养人的爱心和耐心。养猫同样可以给人带来愉悦的身心和放松的心情。养猫的过程,其实是一个和自己相处,然后和解,最后接纳的过程。
![01_AGoodCat](01_AGoodCat.png)
然后,再执行如下命令:
localhost:merge chengxia$ for f in ../01_GoodsOfCats/01_GoodsOfCatsV2.md ../02_HowToFeedCats/02_HowToFeedCats.md ../03_GainsFromCats/03_GainsFromCats.md; do awk 'NR==1{sub(/^#/,"\n##");sub(/# [0-9\.、\s]/,"# ");match(substr(FILENAME, 1, length(FILENAME)-3),"/.+_");print "\n# "substr(substr(FILENAME, 1, length(FILENAME)-3),RSTART+RLENGTH)"\n" $0}NR!=1{sub(/^#/,"\n##");sub(/# [0-9\.、 ]+/,"# ");print $0}' $f; done | pandoc --resource-path="../01_GoodsOfCats/:../02_HowToFeedCats/:../03_GainsFromCats/" --toc --toc-depth=5 --number-sections --standalone --extract-media="./img/" --metadata title="养猫指南" --metadata author="美泡泡" -o all.html
localhost:merge chengxia$
效果如下:
image.png
3.3 合并为md文件
运行如下命令,也可以将分开写的md文件,合并成一个:
$ for f in ../01_GoodsOfCats/01_GoodsOfCatsV2.md ../02_HowToFeedCats/02_HowToFeedCats.md ../03_GainsFromCats/03_GainsFromCats.md; do awk 'NR==1{sub(/^#/,"\n##");sub(/# [0-9\.、\s]/,"# ");match(substr(FILENAME, 1, length(FILENAME)-3),"/.+_");print "\n# "substr(substr(FILENAME, 1, length(FILENAME)-3),RSTART+RLENGTH)"\n" $0}NR!=1{sub(/^#/,"\n##");sub(/# [0-9\.、 ]+/,"# ");print $0}' $f; done |pandoc --resource-path="../01_GoodsOfCats/:../02_HowToFeedCats/:../03_GainsFromCats/" --extract-media="./img/" --metadata title="养猫指南" --metadata author="美泡泡" -o all.md
ChengdeMacBook-Pro:merge chengxia$
合并后的效果如下:
image.png
网友评论