美文网首页
Pandoc合并不同目录下的md文件

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

作者: SpaceCat | 来源:发表于2023-03-12 01:02 被阅读0次

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

相关文章

  • Markdown转PDF

    利用Pandoc可以轻易地将md文件转为PDF文件。pandoc -N -s --toc --smart --la...

  • windows dos 常用命令行 01

    dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目...

  • windows常用命令集锦

    dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目...

  • windows dos命令行

    dir (directory) :列出当前目录下的文件以及文件夹 md (make directory): 创建目...

  • md文档快速转word总结

    md文件转word需要安装插件pandoc pandoc安装 可以直接下载.msi程序 直接点击安装,一直Next...

  • java复习1

    Doc命令: dir : 列出当前目录下的文件以及文件夹 md: 创建目录 rd: 删除目录 cd: 进入指定的目...

  • pandoc提取word中的图片

    pandoc是文档转换利器。在将docx文档转为md文档过程中,如果直接输入pandoc -o f.md f[^f...

  • 20210709Java-DOS命令

    DOS基本命令 d: 回车 盘符切换 dir 列出当前目录下文件及文件夹如: md (make dir) 创建目...

  • pandoc

    下面的命令将一份 Markdown 文件转换为 docx 格式: pandoc demo.md -o demo.d...

  • Pandoc简单运用实例

    这里介绍通过Pandoc这个工具,合并多个Markdown文件,输出到html、pdf等。所有例子的运行环境,均在...

网友评论

      本文标题:Pandoc合并不同目录下的md文件

      本文链接:https://www.haomeiwen.com/subject/qnjfrdtx.html