Utilizzare il comando find per convertire i file markdown in html


17

Supponiamo che sul mio disco fisso siano presenti file con estensioni come .md.

Voglio convertire tutti quei file in .htmlattraverso finde l' -execopzione.

Il comando per convertire un file markdown in html è

markdown readme.md > readme.html

Sto cercando di usare qualcosa del tipo:

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

Naturalmente, quanto sopra non funziona. Quindi, come posso farlo usando solo finde exec?


Risposte:


16

Devi citare il costrutto contenente >perché è un carattere speciale della shell, come questo:

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

Questo rinominerà anche i file in modo da finire foo.htmlinvece di foo.md.html:

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

Non ottieni file.md.html ora? Invece di file.html?
Bernhard,

@rush Perché {}alla fine ho bisogno di entrambi i comandi? Inoltre, nel secondo comando, è difficile seguire per me cosa è successo? Non ho capito la ${0%.md}/.htmlparte.
Abhijeet Rastogi,

A proposito, ho appena controllato. probabilmente hai scritto la barra in avanti per errore ${0%.md}/.html.
Abhijeet Rastogi,

@shadyabhi Il finale {}è l'argomento di input per la sh -cstringa e vi si accede come $0. Il comando che non capisci rimuove .mde aggiunge .html. Probabilmente hai ragione a scappare dal.
Bernhard il

@ Bernard Grazie per la tua risposta. Onestamente, prima sapevo anche che si tratta di eliminare .mde aggiungere, .htmlma vorrei saperne di più. Puoi reindirizzarmi a un wiki / doc che spiega questo?
Abhijeet Rastogi,

0

Il modo per ottenere esattamente ciò che hai scritto è usare l markdown' -oopzione, che specifica il nome del file di output, ad es

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

In questo modo si evita di avviare una nuova shell solo per eseguire il markdown.

Sfortunatamente, come sottolinea Bernhard, farlo in questo modo ti dà file chiamati file.md.htmlinvece di file.html, quindi l'approccio di rush è più appropriato qui.


1
Ma markdownnon ha -oun'opzione. Ho ricontrollato prima di commentare.
Abhijeet Rastogi,

markdown (1) dice di si, ma forse hai una versione diversa?
Mikel,

1
Puoi anche usare pandoc -f markdown -t html -o....
Mikel

Ohk, stavo usando daringfireball.net/projects/markdown e non ce l'ho.
Abhijeet Rastogi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.