Użyj polecenia find, aby przekonwertować pliki Markdown na HTML


17

Załóżmy, że mam pliki na dysku twardym posiadające rozszerzenia jako .md.

Chcę przekształcić te wszystkie pliki .htmlza pośrednictwem findtej i -execopcji.

Polecenie przekonwertowania pliku przeceny na HTML to

markdown readme.md > readme.html

Próbuję użyć czegoś takiego:

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

Oczywiście powyższe nie działa. Jak mam to zrobić, używając tylko findi exec?


Odpowiedzi:


16

Musisz zacytować wokół konstruktu zawierającego, >ponieważ jest to znak specjalny powłoki, taki jak ten:

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

Spowoduje to również zmianę nazw plików, więc foo.htmlzamiast tego foo.md.html:

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

Nie otrzymujesz teraz file.md.html? Zamiast pliku.html?
Bernhard

@ rush Dlaczego potrzebuję {}na końcu obu poleceń? Poza tym w drugim poleceniu trudno jest mi śledzić, co się stało? Nie zrozumiałem tej ${0%.md}/.htmlczęści.
Abhijeet Rastogi

Btw, właśnie sprawdziłem. prawdopodobnie przez pomyłkę napisałeś ukośnik do przodu ${0%.md}/.html.
Abhijeet Rastogi

@shadyabhi Końcowy {}jest argumentem wejściowym dla sh -cciągu i jest dostępny jako $0. Polecenie, którego nie rozumiesz, usuwa .mdi dodaje .html. Prawdopodobnie masz rację, uciekając przed.
Bernhard

@Bernhard Dziękujemy za odpowiedź. Szczerze mówiąc, wcześniej wiedziałem również, że to rozbiera .mdi dodaje, .htmlale chciałbym dowiedzieć się więcej na ten temat. Czy możesz przekierować mnie do wiki / dokumentu, który to wyjaśnia?
Abhijeet Rastogi

0

Sposobem na osiągnięcie dokładnie tego, co napisałeś, jest skorzystanie markdownz -oopcji, która określa nazwę pliku wyjściowego, tj

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

Robiąc to w ten sposób unika się uruchamiania nowej powłoki tylko po to, by uruchomić markdown.

Niestety, jak zauważa Bernhard, zrobienie tego w ten sposób daje pliki o nazwie file.md.htmlzamiast file.html, więc podejście Rush jest bardziej odpowiednie tutaj.


1
Ale markdownnie ma -oopcji. Sprawdziłem dwukrotnie przed komentowaniem.
Abhijeet Rastogi

markdown (1) mówi, że tak, ale może masz inną wersję?
Mikel

1
Możesz także użyć pandoc -f markdown -t html -o....
Mikel

Och, korzystałem z daringfireball.net/projects/markdown i nie ma tego.
Abhijeet Rastogi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.