Используйте команду find для преобразования файлов разметки в HTML


17

Предположим, у меня есть файлы на жестком диске, имеющие расширения как .md.

Я хочу, чтобы преобразовать все эти файлы в .htmlсквозной findи -execвариант.

Команда для преобразования файла уценки в HTML

markdown readme.md > readme.html

Я пытаюсь использовать что-то вроде:

find / -name "*.md" -type f -exec markdown {} > {}.html \;

Конечно, вышесказанное не работает. Итак, как мне это сделать, используя только findи exec?


Ответы:


16

Вам нужно заключить в кавычки конструкцию, содержащую, >потому что это специальный символ оболочки, например:

find / -name "*.md" -type f -exec sh -c 'markdown "$0" > "$0.html"' {} \;

Это также переименует файлы, так что вы получите foo.htmlвместо foo.md.html:

find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;

Разве вы не получили file.md.html сейчас? Вместо файла .html?
Бернхард

@rush Зачем мне нужно {}в конце в обеих командах? Кроме того, во второй команде мне трудно следить за тем, что произошло? Я не понял ${0%.md}/.htmlчасть.
Абхиджит Растоги

Кстати, я только что проверил. Вы, вероятно, написали косую черту по ошибке в ${0%.md}/.html.
Абхиджит Растоги

@shadyabhi Последний {}- входной аргумент для sh -cстроки, доступ к которому осуществляется как $0. Команда, которую вы не понимаете, разбивает .mdи добавляет .html. Вы, вероятно, правы, избежав.
Бернхард

@Bernhard Спасибо за ваш ответ. Честно говоря, я знал и раньше, что это раздевание .mdи добавление, .htmlно я хотел бы узнать больше об этом. Можете ли вы перенаправить меня на вики / документ, который объясняет это?
Абхиджит Растоги

0

Чтобы добиться именно того, что вы написали, используйте опцию markdown's -o, которая указывает имя выходного файла, т.е.

find / -name "*.md" -type f -exec markdown -o {}.html {} \;

Делая это таким образом, вы избегаете запуска новой оболочки только для запуска уценки.

К сожалению, как указывает Бернхард, если вы сделаете это таким образом, вы получите имена файлов file.md.htmlвместо file.html, поэтому подход rush здесь более уместен.


1
Но markdownне имеет -oвыбора. Я дважды проверил, прежде чем комментировать.
Абхиджит Растоги

markdown (1) говорит, что да, но, может быть, у вас другая версия?
Микель

1
Вы также можете использовать pandoc -f markdown -t html -o....
Микель

Ох, я использовал daringfireball.net/projects/markdown, и он не имеет этого.
Абхиджит Растоги
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.