Преобразование всех файлов в папку в 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