Преобразование всех файлов в папку в md с помощью pandoc на Mac
Я пытаюсь преобразовать весь каталог из html в markdown. Дерево каталогов довольно высокое, поэтому есть файлы, вложенные в два и три уровня вниз.
Отвечая на этот вопрос, Джон МакФарлейн предложил использовать следующий 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
в этом файле.
(Я подозреваю, что что-то в этом направлении должно помочь, но я далек от уверенности в том, что я не сломаю вещи, если я попытаюсь самостоятельно это сделать. Я неграмотен, когда дело доходит до GNU make
).)
Ответы
Ответ 1
Поскольку вы упомянули вы не возражаете, не используя make
, вы можете попробовать bash
.
Я изменил код из этого ответа, используйте в родительском каталоге:
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
. Подробнее см. Здесь.
Ответ 2
Вот как я это сделал!
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