Utilisez la commande find pour convertir les fichiers de démarques en html

17

Supposons que j'ai des fichiers sur mon disque dur ayant des extensions comme .md.

Je veux convertir tous les fichiers à .htmltravers findet l' -execoption.

La commande pour convertir un fichier de démarque en html est

markdown readme.md > readme.html

J'essaie d'utiliser quelque chose comme:

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

Bien sûr, ce qui précède ne fonctionne pas. Alors, comment puis-je faire cela en utilisant uniquement findet exec?

Abhijeet Rastogi
la source

Réponses:

16

Vous devez citer autour de la construction contenant >car c'est un caractère spécial shell, comme ceci:

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

Cela renommera également les fichiers afin que vous vous retrouviez avec foo.htmlau lieu de foo.md.html:

find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;
se ruer
la source
Ne recevez-vous pas file.md.html maintenant? Au lieu de file.html?
Bernhard
@rush Pourquoi ai-je besoin {}à la fin des deux commandes? De plus, dans la deuxième commande, il est difficile de suivre pour moi ce qui s'est passé? Je n'ai pas compris la ${0%.md}/.htmlpartie.
Abhijeet Rastogi
Btw, je viens de vérifier. vous avez probablement écrit une barre oblique par erreur dans ${0%.md}/.html.
Abhijeet Rastogi du
@shadyabhi La finale {}est l'argument d'entrée de la sh -cchaîne, et y est accessible en tant que $0. La commande que vous ne comprenez pas les bandes .mdet ajoute .html. Vous avez probablement raison d'échapper au.
Bernhard
@Bernhard Merci pour votre réponse. Honnêtement, je savais aussi plus tôt que cela supprime .mdet ajoute, .htmlmais j'aimerais en savoir plus. Pouvez-vous me rediriger vers un wiki / doc qui explique cela?
Abhijeet Rastogi
0

La façon d'obtenir exactement ce que vous avez écrit est d'utiliser markdownl' -ooption de, qui spécifie le nom du fichier de sortie, c'est-à-dire

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

Faire de cette façon évite de démarrer un nouveau shell juste pour exécuter le démarquage.

Malheureusement, comme le souligne Bernhard, le faire de cette façon vous donne des fichiers nommés file.md.htmlau lieu de file.html, donc l'approche de rush est plus appropriée ici.

Mikel
la source
1
Mais, markdownn'a pas d' -ooption. J'ai revérifié avant de commenter.
Abhijeet Rastogi
markdown (1) le dit, mais peut-être avez-vous une version différente?
Mikel
1
Vous pouvez également utiliser pandoc -f markdown -t html -o....
Mikel
Ohk, j'utilisais daringfireball.net/projects/markdown et ça n'a pas ça.
Abhijeet Rastogi