【问题标题】:Recursive directory parsing with Pandoc on Mac在 Mac 上使用 Pandoc 进行递归目录解析
【发布时间】:2016-05-13 19:12:07
【问题描述】:

I found this question 回答了使用 Pandoc 执行批量转换的问题,但没有回答如何使其递归的问题。我事先声明我不是程序员,所以我在这里寻求一些帮助。

Pandoc 文档在将成批文件传递给可执行文件的细节上很少,而且根据脚本,Pandoc 本身似乎不能一次解析多个文件。下面的脚本在 Mac OS X 中工作得很好,但只处理本地目录中的文件并将结果输出到同一个地方。

find . -name \*.md -type f -exec pandoc -o {}.txt {} \;

我使用以下代码获得了我希望的结果:

find . -name \*.html -type f -exec pandoc -o {}.markdown {} \;

这个简单的脚本,使用安装在 Mac OS X 10.7.4 上的 Pandoc 运行,将我运行它的目录中的所有匹配文件转换为 markdown 并将它们保存在同一目录中。例如,如果我有一个名为 apps.html 的文件,它会将该文件转换为与源文件位于同一目录中的 apps.html.markdown

虽然我很高兴它进行了转换,而且速度很快,但我需要它来处理位于一个目录中的所有文件,并将 Markdown 版本放在一组镜像目录中进行编辑。最终,这些目录位于 Github 存储库中。一个分支用于编辑,而另一个分支用于生产/发布。此外,这个简单的脚本保留了原始扩展名并附加了新的扩展名。如果我再次转换回来,它会在 markdown 扩展名之后添加 HTML 扩展名,并且文件大小会越来越大。

从技术上讲,我需要做的就是解析一个分支目录并将其与生产目录同步,然后当所有更改、删除和新内容都被验证正确时,我可以运行提交以发布更改。看起来 Find 命令可以处理所有这些,但我不知道如何正确配置它,即使在阅读了 Mac OS X 和 Ubuntu 手册页之后也是如此。

任何善意的话语都会受到深深的赞赏。

TC

【问题讨论】:

    标签: html markdown pandoc


    【解决方案1】:

    创建以下Makefile

    TXTDIR=sources
    HTMLS=$(wildcard *.html)
    MDS=$(patsubst %.html,$(TXTDIR)/%.markdown, $(HTMLS))
    
    .PHONY : all
    
    all : $(MDS)
    
    $(TXTDIR) :
        mkdir $(TXTDIR)
    
    $(TXTDIR)/%.markdown : %.html $(TXTDIR)
        pandoc -f html -t markdown -s $< -o $@
    

    (注意:缩进的行必须以 TAB 开头——这在上面可能不会出现,因为 Markdown 通常会去掉标签。)

    然后你只需要输入'make',它就会对工作目录中每个扩展名为.html 的文件运行pandoc,在'sources' 中生成一个markdown 版本。与使用“查找”相比,此方法的一个优点是它只会对自上次运行以来已更改的文件运行 pandoc。

    【讨论】:

    • 哇!谢谢!!自从我昨天发布这个问题以来,我一直在看这个问题,只是找到了你的答案。多么奇怪,但非常感谢。这看起来真的很酷,虽然我不完全明白它在做什么。我看到您正在定义 TXTDIR、HTMLS 和 MDS,并且它们中有某种逻辑。我将针对原始 HTML 的测试副本运行它。根据您的描述,它仅适用于运行它的目录中的文件,是吗?非常感谢!
    • 我发现它看起来像 perl,所以我运行了更新以确保它已在我的系统上更新。这是我收到的:GRID-Tyler-MBP:apps admin$ make --makefile=pandoc_h2m.makefile pandoc_h2m.makefile:13: warning: overriding commands for target `sources' pandoc_h2m.makefile:10: warning: ignoring old commands for target `sources' make: *** No rule to make target `%.html', needed by `sources'. Stop.
    • 这行得通。我的坏处是在它们不属于的地方添加空格,这导致脚本中断。这是非常非常棒的!!需要注意的是,对于尝试使用它的任何其他人,为了在 Mac 上使用 Perl,您首先必须安装 XCode,然后安装命令行工具,然后更新 Perl。我使用了位于这个精彩网站上其他地方的以下命令:sudo /usr/bin/perl MCPAN -e 'install "JSON"'。这个实例化了 Perl,应用了更新,然后安装了 JSON,无论如何这很有帮助。
    • 嗯,这只是表明我不是一个开发人员:D 谢谢,约翰!非常非常感谢。
    • @JohnMacFarlane make 脚本不进行递归转换(html 位于子目录中)?对此有何建议?
    【解决方案2】:

    仅作记录:这是我如何将一堆 HTML 文件转换为它们的 Markdown 等效文件:

    for file in $(ls *.html); do pandoc -f html -t markdown "${file}" -o "${file%html}md"; done
    

    当您查看来自 -o 参数的脚本代码时,您会看到它使用字符串操作来删除以 md 文件结尾的现有 html。

    【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2013-03-21
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多