我正在尝试将整个目录从html转换为markdown。目录树非常高,因此有两个和三个级别的文件嵌套。
在回答this question时,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 $@
现在,这似乎并没有进入子目录。有没有简单的方法来修改它,以便它将处理整个树?
我不需要这个make
。我正在寻找的是一种获取初始目录镜像的方法,其中每个html
文件被该文件上运行pandoc
的输出所取代。
(我怀疑these lines的某些内容应该会有所帮助,但如果我尝试自己解决这个问题,我就不会有信心打破这些事情。我很有意思关于GNU make
)的文盲。)
答案 0 :(得分:28)
由于您提到您不介意不使用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 :(得分: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