Вопрос по markdown, html, pandoc – Рекурсивный анализ каталогов с помощью Pandoc на Mac

4

Я нашел этот вопрос у которого был ответ на вопрос о выполнении пакетных преобразований с помощью Pandoc, но он не отвечает на вопрос о том, как сделать его рекурсивным. Я заранее оговариваю, что я не программист, поэтому я ищу некоторую помощь по этому вопросу здесь.

Документация Pandoc содержит небольшую информацию о передаче пакетов файлов в исполняемый файл, и на основании сценария кажется, что сам Pandoc не способен анализировать более одного файла за раз. Приведенный ниже скрипт прекрасно работает в Mac OS X, но обрабатывает только файлы в локальном каталоге и выводит результаты в том же месте.

find . -name \*.md -type f -exec pandoc -o {}.txt {} \;

Я использовал следующий код, чтобы получить результат, на который я надеялся:

find . -name \*.html -type f -exec pandoc -o {}.markdown {} \;

Этот простой скрипт, запускаемый с использованием Pandoc, установленного в Mac OS X 10.7.4, преобразует все соответствующие файлы в каталоге, в котором я его запускаю, в уценку и сохраняет их в том же каталоге. Например, если у меня был файл с именемapps.html, это будет конвертировать этот файл вapps.html.markdown в том же каталоге, что и исходные файлы.

Хотя мне приятно, что он выполняет преобразование, и это быстро, мне нужно, чтобы он обрабатывал все файлы, расположенные в одном каталоге, и помещал версии уценки в набор зеркальных каталогов для редактирования. В конечном итоге эти каталоги находятся в репозиториях Github. Одна ветвь предназначена для редактирования, а другая - для производства / публикации. Кроме того, этот простой скрипт сохраняет исходное расширение и добавляет к нему новое расширение. Если я снова выполню конвертацию, он добавит расширение HTML после расширения уценки, и размер файла будет только расти и расти.

Технически, все, что мне нужно сделать, это уметь анализировать один каталог ветвей и синхронизировать его с рабочим каталогом, а затем, когда все изменения, удаление и проверка нового содержимого будут подтверждены, я могу выполнить коммиты для публикации изменений. Похоже, что команда Find может справиться со всем этим, но я просто понятия не имею, как правильно ее настроить, даже после прочтения справочных страниц Mac OS X и Ubuntu.

Любые добрые слова мудрости будут высоко оценены.

TC

Ваш Ответ

2   ответа
9

вот как я добился преобразования набора файлов HTML в их эквиваленты Markdown:

for file in $(ls *.html); do pandoc -f html -t markdown "${file}" -o "${file%html}md"; done

Когда вы посмотрите на код сценария из аргумента -o, вы увидите, что он использует строковые манипуляции для удаления существующего html с окончанием md-файла.

Это не работает рекурсивно, это скорее ответ наthis question
9

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», и он будет запускать pandoc для каждого файла с расширением .html в рабочем каталоге, создавая версию уценки в «источниках». Преимущество этого метода по сравнению с использованием 'find' apos; является то, что он будет запускать Pandoc только на файл, который изменился с момента последнего запуска.

Это не Perl. Это & APOS; sGNU Make.
Ну, это просто показывает, насколько я НЕ разработчик: D Спасибо, Джон! Очень, очень высоко ценится. Tyler Regas
Я понял, что это похоже на perl, поэтому я запустил обновление, чтобы убедиться, что оно было обновлено в моей системе. Вот что я получил:GRID-Tyler-MBP:apps admin$ make --makefile=pandoc_h2m.makefile pandoc_h2m.makefile:13: warning: overriding commands for target `sources' pandoc_h2m.makefile:10: warning: ignoring old commands for target `sources' make: *** No rule to make target `%.html', needed by `sources'. Stop. Tyler Regas
Это работает. Моя проблема заключалась в том, чтобы добавить пробелы, где они не принадлежат, что привело к разрыву сценария. Это очень, очень здорово! Одно замечание: для всех, кто пытается это использовать, для того, чтобы Perl использовался на Mac, сначала необходимо установить XCode, установить инструменты командной строки после этого, а затем обновить Perl. Я использовал следующую команду, расположенную в другом месте на этом замечательном сайте:sudo /usr/bin/perl MCPAN -e 'install "JSON"', Это создало экземпляр Perl, применил обновления, а затем установил JSON, что в любом случае полезно. Tyler Regas
Вот Это Да! Спасибо!! Я смотрел этот вопрос с тех пор, как вчера опубликовал его, и только что нашел ваш ответ. Как странно, но большое спасибо. Это выглядит действительно круто, хотя я не совсем понимаю, что он делает. Я вижу, что вы определяете TXTDIR, HTMLS и MDS и в них есть какая-то логика. Я столкнусь с тестовой копией оригинального HTML. Из того, что вы описываете, он работает только с файлами, расположенными в каталоге, в котором он запущен, да? Спасибо! Tyler Regas

Похожие вопросы