Pandoc转换Nimbus Notes导出HTML为Markdown的问题及异常
问题分析与解决办法
异常原因
添加-t gfm-raw_html参数确实是导致部分笔记空白的原因,具体两点:
gfm-raw_html会过滤GFM不支持的HTML标签,如果Nimbus Notes导出的部分HTML里,所有内容都包裹在这类被过滤的标签中,转换后自然就没有内容输出。- 部分Nimbus Notes的HTML可能存在结构异常(比如标签嵌套错误、带特殊属性的自定义标签),启用
gfm-raw_html的严格过滤规则后,Pandoc无法识别出有效内容。
解决办法
方案1:调整参数平衡过滤效果与内容保留
把参数换成-t gfm --markdown-headings=atx --strip-comments,既可以清理大部分冗余内容,又不会过度过滤导致内容丢失。修改后的脚本如下:
#!/bin/bash # Use the current working directory as the root directory root_dir="." # Recursively traverse the directory structure find "$root_dir" -name '*.html' -type f -exec sh -c 'pandoc "$1" -t gfm --markdown-headings=atx --strip-comments -o "${1%.html}.md"' _ {} \;
这个参数组合的作用:
- 生成Obsidian兼容的ATX格式标题
- 去除HTML中的注释类冗余内容
- 保留合法HTML标签并转换为对应Markdown格式,不会轻易过滤核心内容
方案2:针对空白笔记单独处理
- 找到那4份空白笔记对应的原HTML文件,用文本编辑器打开查看结构
- 如果发现内容被包裹在特殊自定义标签里,可临时用
--html-q-tags参数强制保留内容,单独转换这些文件:
pandoc "问题文件名.html" -t gfm --html-q-tags -o "问题文件名.md"
- 要是HTML存在结构错误,手动修复后再重新转换
方案3:脚本添加兜底逻辑避免空白
在脚本里加入检查,要是转换后的Markdown为空,自动用默认参数重新转换:
#!/bin/bash root_dir="." find "$root_dir" -name '*.html' -type f -exec sh -c ' input_file="$1" output_file="${1%.html}.md" # 先用gfm-raw_html转换 pandoc "$input_file" -t gfm-raw_html -o "$output_file" # 检查文件大小,为空则用默认参数重转 if [ ! -s "$output_file" ]; then pandoc "$input_file" -o "$output_file" echo "重新转换空白文件: $input_file" fi ' _ {} \;
内容的提问来源于stack exchange,提问作者Tesgin
相关产品推荐
相关产品推荐

