5

我发现这个问题对使用 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 。

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

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

任何善意的智慧之言都将不胜感激。

TC

4

2 回答 2

13

创建以下内容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 开头——这在上面可能不会出现,因为降价通常会去掉标签。)

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

于 2012-06-14T09:26:15.843 回答
12

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

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

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

于 2013-05-29T09:55:55.473 回答