2014-09-30 180 views
14

我试图将整个目录从html转换为markdown。目录树很高,所以有两层和三层嵌套的文件。在Mac上使用pandoc将文件夹中的所有文件转换为md

在回答this question,约翰·麦克法兰使用以下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 [email protected] 

现在,这似乎并没有进去子目录。有没有简单的方法来修改它,以便处理整个树?我不需要make。我正在寻找的是一种获取初始目录镜像的方法,其中每个html文件被该文件上运行的pandoc的输出替换。 (我怀疑沿着these lines应该有所帮助,但是我很不自信,如果我自己试着去做,我就不会破坏事物)。我不知道如何处理GNU make)。

+0

如果您不知道'make',也许您只是尝试用自己喜欢的语言编写自己的脚本,例如, Python还是Ruby? (对不起,现在没有更多的帮助) – mb21 2014-10-02 14:23:25

+0

是的,我可以试试。 – apc 2014-10-15 15:52:30

回答

20

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

我修改了代码从这个answer,在父目录使用:

find ./ -iname "*.md" -type f -exec sh -c 'pandoc "${0}" -o "${0%.md}.pdf"' {} \; 

它工作时,我测试了它,所以它应该为你工作。

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

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

我测试了这一点,它为我工作。

编辑:作为每一个注释,与find使用并且-exec选项被用作当{} \;,或多或少,占位符在文件名应为。如同它扩展了发现放置在命令中的文件名。 \;结束-exec。有关更多说明,请参阅here

+1

谢谢。只是为了澄清。为了让它做我想做的(即采取'html'文件并输出'md'文件)它应该是:'find ./ -iname“* .html”-type f -exec sh -c'pandoc“$ {0}“-o”$ {0%.html} .md“'{} \;',对吗?任何想法如何指定输出文件夹? (因为它只是将'md'文件放在与对应的'html'文件夹相同的文件夹中 – apc 2014-10-15 14:57:26

+0

@apc我已经更新了我的答案 – Luke 2014-10-17 17:42:38

+0

这会导致我的机器出现以下错误:'pandoc :: openFile:不存在(没有这样的文件或目录)'。文件被找到,但是'$ {0}'似乎是空的。 – 2017-07-30 12:29:20

1

这就是我做到的!

files=($(find ${INPUT_FOLDER} -type f -name '*.md')) 
for item in ${files[*]} 
do 
    printf " %s\n" $item 
    install -d ${DIR}/build/$item 
    pandoc $item -f markdown -t html -o ${DIR}/build/$item.html; 
    rm -Rf ${DIR}/build/$item 
done 
相关问题