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

17

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

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

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

markdown readme.md > readme.html

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

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

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

Абхиджит Растоги
источник
Связанный: unix.stackexchange.com/questions/39654/…
Бернхард

Ответы:

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 здесь более уместен.

Mikel
источник
1
Но markdownне имеет -oвыбора. Я дважды проверил, прежде чем комментировать.
Абхиджит Растоги
markdown (1) говорит, что да, но, может быть, у вас другая версия?
Микель
1
Вы также можете использовать pandoc -f markdown -t html -o....
Микель
Ох, я использовал daringfireball.net/projects/markdown, и он не имеет этого.
Абхиджит Растоги