Використовуйте команду 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 зараз? Замість file.html?
Бернхард

@rush Навіщо мені потрібно {}в кінці обох команд? Також у другій команді мені важко слідкувати за тим, що сталося? Я не розумів ${0%.md}/.htmlчастини.
Abhijeet Rastogi

До речі, я щойно перевірив. ви, ймовірно, помилково писали косу рису вперед ${0%.md}/.html.
Abhijeet Rastogi

@shadyabhi Фінал {}є вхідним аргументом для sh -cрядка, і чи є він доступним як $0. Команда, яку ви не розумієте, .mdдодає смужки та додає .html. Ви, мабуть, вірно врятуєтесь.
Бернхард

@Bernhard Дякуємо за вашу відповідь. Чесно кажучи, я раніше також знав, що це зачистка .mdта додавання, .htmlале я хотів би дізнатися про це більше. Чи можете ви перенаправити мене на wiki / doc, який пояснює це?
Abhijeet Rastogi

0

Спосіб досягнення саме того, що ви написали, - це використовувати markdown-o параметром 's , який вказує назву вихідного файлу, тобто

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

Це робиться таким чином, дозволяє уникнути запуску нової оболонки просто для запуску розмітки.

На жаль, як зазначає Бернхард, цим способом ви надаєте файли, іменовані file.md.htmlзамість file.html, тому підхід Rush тут більше підходить.


1
Але варіант markdownне має -o. Я ще раз перевірив, перш ніж коментувати.
Abhijeet Rastogi

markdown (1) каже, що це так, але, можливо, у вас інша версія?
Мікель

1
Ви також можете використовувати pandoc -f markdown -t html -o....
Мікель

Ой, я використовував daringfireball.net/projects/markdown, і це не так.
Abhijeet Rastogi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.