Makefile 使用Mac上的pandoc将文件夹中的所有文件转换为md
我正在尝试将整个目录从html转换为markdown。目录树相当高,因此有两层和三层嵌套的文件 在回答时,约翰·麦克法兰建议使用以下Makefile 使用Mac上的pandoc将文件夹中的所有文件转换为md,makefile,pandoc,Makefile,Pandoc,我正在尝试将整个目录从html转换为markdown。目录树相当高,因此有两层和三层嵌套的文件 在回答时,约翰·麦克法兰建议使用以下Makefile: TXTDIR=sources HTMLS=$(wildcard *.html) MDS=$(patsubst %.html,$(TXTDIR)/%.markdown, $(HTMLS)) .PHONY : all all : $(MDS) $(TXTDIR) : mkdir $(TXTDIR) $(TXTDIR)/%.markdo
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 $@
TXTDIR=源
HTMLS=$(通配符*.html)
MDS=$(patsubst%.html,$(TXTDIR)/%.markdown,$(HTMLS))
冒牌货:全部
全部:$(MDS)
$(TXTDIR):
mkdir$(TXTDIR)
$(TXTDIR)/%。降价:%.html$(TXTDIR)
pandoc-f html-t降价-s$<-o$@
现在,它似乎没有进入子目录。有没有简单的方法来修改它,使它能够处理整个树
我不需要把它放在make
中。我所要寻找的是一种获得初始目录镜像的方法,其中每个html
文件都被在该文件上运行pandoc
的输出所替换
(我怀疑一些事情会有帮助,但我很难相信如果我尝试自己去做,我不会破坏东西。当涉及到
GNU make
)时,我是文盲。)既然你提到你不介意不使用make
,你可以试试bash
我修改了此代码,在父目录中使用:
find ./ -iname "*.md" -type f -exec sh -c 'pandoc "${0}" -o "${0%.md}.pdf"' {} \;
当我测试它时,它工作了,所以它应该适合你
根据请求如何指定输出文件夹?(使用html
作为原始文件,使用md
作为输出):
我已经测试过了,它对我很有效
编辑:根据注释,{}
与find
一起使用时,-exec
选项或多或少用作文件名应位于的位置的占位符。如中所示,它将展开要放置在命令中的文件名。\代码>结束-exec
。请参阅以了解更多解释。我就是这样做的
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
如果你不知道make
,也许你只是试着用你最喜欢的语言编写你自己的脚本,例如Python或Ruby?(很抱歉现在帮不上忙)是的,我可以试试看。谢谢。我只是想澄清一下。为了让它做我想要的事情(即获取html
文件并输出md
文件),它应该是:find./-iname“*.html”-type f-exec sh-c'pandoc”${0}”-o“${0%.html}.md”{}代码>,对吗?你知道如何指定输出文件夹吗?(实际上,它只是将md
文件与相应的html
文件放在同一个文件夹中。这会在我的机器上导致以下错误:pandoc::openFile:不存在(没有这样的文件或目录)
。找到了文件,但${0}
似乎是空的。那`{}是什么呢\;`最后怎么办?让我知道我是否应该打开一个新问题,但是当我运行这个pandoc时,找不到任何包含的文件。例如,我的子文件夹中有html和带有图像的标记文件(相对于.md文件)。
或![Notes/Untitled.png](Notes/Untitled.png)
给出警告:无法获取资源“Notes/Untitled.png”:PandocResourceNotFound“Notes/Untitled.png”
但是,如果我直接在markdown/html文件上运行pandoc,它可以在子文件夹中找到图像。
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