Pandoc合并不同目录下的md文件

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
效果如下:

image.png

从这里,可以看出,在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/"参数指定图片存放的专门目录。
效果如下:

image.png

可以看出,因为不嵌入图片,这次输出的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

4、Pandoc参数说明

采用--number-offset参数可以指定md生成html时,标题的起始编号。说明文档中描述如下:

--number-offset=NUMBER[,NUMBER,…]
Offset for section headings in HTML output (ignored in other output formats). The first number is added to the section number for top-level headings, the second for second-level headings, and so on. So, for example, if you want the first top-level heading in your document to be numbered “6”, specify --number-offset=5. If your document starts with a level-2 heading which you want to be numbered “1.5”, specify --number-offset=1,4. Offsets are 0 by default. Implies --number-sections.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容