使用Mac上的pandoc将文件夹中的所有文件转换为md

apc*_*apc 19 makefile pandoc

我试图将整个目录从html转换为markdown.目录树非常高,因此有两个和三个级别的文件嵌套.

在回答这个问题时,John MacFarlane建议使用以下内容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 $@
Run Code Online (Sandbox Code Playgroud)

现在,这似乎没有进入子目录.有没有简单的方法来修改它,以便它将处理整个树?

我不需要这个make.我正在寻找的是一种获取初始目录的镜像的方法,其中每个html文件被pandoc该文件上运行的输出所取代.

(我怀疑这些方面的某些内容应该会有所帮助,但是如果我试图自己解决这个问题,我就不会有信心我不会破坏它.我说的是文盲GNU make.)

Luk*_*ton 30

既然你提到你不介意使用make,你可以试试bash.

我修改了这个答案的代码,在父目录中使用:

find ./ -iname "*.md" -type f -exec sh -c 'pandoc "${0}" -o "${0%.md}.pdf"' {} \;
Run Code Online (Sandbox Code Playgroud)

它在我测试时起作用,所以它应该适合你.

根据请求任何想法如何指定输出文件夹?(html用作原始文件和md输出):

find ./ -iname "*.html" -type f -exec sh -c 'pandoc "${0}" -o "./output/$(basename ${0%.html}.md)"' {} \;
Run Code Online (Sandbox Code Playgroud)

我测试了这个,它对我有用.

编辑:根据注释,{} \;使用时find-exec选项用作文件名所在的或多或少的占位符.就像在它中展开发现放在命令中的文件名一样.该\;结束了-exec.请参阅此处以获取更多解释

  • 谢谢。只是为了澄清。要使其执行我想要的操作(即获取`html`文件并输出`md`文件),它应该是:find ./ -iname“ * .html” -type f -exec sh -c'pandoc“ $ {0}“ -o” $ {0%.html} .md“'{} \;`,对吗?任何想法如何指定输出文件夹?(因为它只是将md文件与相应的html文件放在同一文件夹中。 (2认同)
  • 这在我的机器上导致以下错误:`pandoc::openFile:不存在(没有这样的文件或目录)`。找到了文件,但是`$ {0}`似乎为空。 (2认同)