Verwenden Sie den Befehl find, um Markdown-Dateien in HTML zu konvertieren

17

Nehmen wir an, ich habe Dateien auf meiner Festplatte mit den Erweiterungen als .md.

Ich möchte all diese Dateien in .htmldurch findund die -execOption konvertieren .

Der Befehl zum Konvertieren einer Markdown-Datei in HTML lautet

markdown readme.md > readme.html

Ich versuche etwas zu benutzen wie:

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

Natürlich funktioniert das oben nicht. Also, wie mache ich das nur mit findund exec?

Abhijeet Rastogi
quelle

Antworten:

16

Sie müssen das Konstrukt in Anführungszeichen setzen, >da es sich um ein Shell-Sonderzeichen handelt:

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

Dies wird auch die Dateien umbenennen, so dass Sie foo.htmlstatt foo.md.html:

find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;
eilen
quelle
Bekommst du jetzt nicht file.md.html? Anstelle von file.html?
Bernhard
@rush Warum brauche ich {}am Ende beide Befehle? Auch im zweiten Befehl ist es schwer für mich zu verfolgen, was passiert ist? Ich habe den ${0%.md}/.htmlTeil nicht verstanden .
Abhijeet Rastogi
Übrigens habe ich gerade nachgesehen. Sie haben wahrscheinlich versehentlich einen Schrägstrich geschrieben ${0%.md}/.html.
Abhijeet Rastogi
@shadyabhi Das Finale {}ist das Eingabeargument für den sh -cString und wird dort als aufgerufen $0. Der Befehl, den Sie nicht verstehen, streift .mdund fügt hinzu .html. Sie haben wahrscheinlich recht mit der Flucht aus dem.
Bernhard
@Bernhard Danke für deine Antwort. Ehrlich gesagt wusste ich früher auch, dass es sich um Strippen .mdund Hinzufügen handelt, .htmlaber ich würde gerne mehr darüber erfahren. Können Sie mich zu einem Wiki / Dokument weiterleiten, das dies erklärt?
Abhijeet Rastogi
0

Um genau das zu erreichen, was Sie geschrieben haben, verwenden Sie markdowndie -oOption, die den Namen der Ausgabedatei angibt, d. H

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

Auf diese Weise wird vermieden, dass eine neue Shell gestartet wird, nur um markdown auszuführen.

Leider, wie Bernhard betont, erhalten Sie auf diese Weise Dateien mit dem Namen file.md.htmlstatt file.html, weshalb der Ansatz von rush hier angemessener ist.

Mikel
quelle
1
Hat markdownaber keine -oOption. Ich habe vor dem Kommentieren noch einmal nachgesehen.
Abhijeet Rastogi
markdown (1) sagt es, aber vielleicht haben Sie eine andere Version?
Mikel
1
Sie könnten auch verwenden pandoc -f markdown -t html -o....
Mikel
Ohk, ich habe daringfireball.net/projects/markdown benutzt und das hat es nicht.
Abhijeet Rastogi